yt-function-sdk-go/README.md

2.1 KiB
Raw Permalink Blame History

Набор инструментов для функций

Пакет

Сообщение является бинарным пакетом. Для работы с ним его для начала необходимо десериализовать. Для этого используется protocol buffer

После десериализации присутствует 4 поля:

  1. Параметры заголовка, которые передаются с пакетом (например http-заголовки). Формат заголовка типа key:string=valye:string
  2. Метаданные. В этом поле передаются служебные данные для самого SDK.
  3. Бинарные данные, которые, которые передаются в функцию

Сборка

Подготовка пакетов

apt install protobuf-compiler
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

Подготовка файлов

protoc --go_out=. ./protobuf/*

Исользование

Пример использования:

package main

import (
    "git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git/network"
    funcSDK "git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git/network"
)

func main(){
    addr, exists := os.LookupEnv("NATS_ADDR")
	if !exists {
		addr = "nats://localhost:4222"
	}

	serve = funcSDK.NewServe(addr, "", "test", nil)
	if serve == nil {
		panic(fmt.Errorf(`serve is not created`))
	}
	serve.AddAccept("*")
	err := serve.Run()
	if err != nil {
		panic(err)
	}

    var err error
	err = serve.RegisterFunction("testFuncSimple", func(header *network.Header, paylod []byte) (result []byte, err error) {
		header.ResponseHeaders["test"] = "my test"
		return []byte("world"), nil
	})
	if err != nil {
		t.Error("Has error: ", err)
		return
	}
	var result []byte
	var header *network.Header
	result, header, err = serve.Call("default.test.testFuncSimple", nil, []byte("Hello"))
    if err!=nil{
        panic(err)
    }
    fmt.Println(header)
	fmt.Println(string(result))
}