Go to file
2022-12-01 15:23:42 +03:00
.vscode first commit 2022-10-23 20:12:23 +03:00
network Prepare callID for logger 2022-11-30 14:24:24 +03:00
protobuf@0614836308 Prepare callID for logger 2022-11-30 14:24:24 +03:00
.gitignore Add created nats connection for reuse resource 2022-10-27 13:51:12 +03:00
.gitmodules Add protobuf 2022-10-25 09:48:46 +03:00
docker-compose.yml Prepare callID for logger 2022-11-30 14:24:24 +03:00
go.mod Add logging 2022-12-01 15:23:42 +03:00
go.sum Add logging 2022-12-01 15:23:42 +03:00
README.md Add CallStream wothout wait result 2022-11-28 10:13:52 +03:00
ytfunction_test.go Add logging 2022-12-01 15:23:42 +03:00
ytfunction.go Add logging 2022-12-01 15:23:42 +03:00

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

Пакет

Сообщение является бинарным пакетом. Для работы с ним его для начала необходимо десериализовать. Для этого используется 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))
}