2022-10-23 20:12:23 +03:00
|
|
|
|
# Набор инструментов для функций
|
|
|
|
|
|
|
|
|
|
# Пакет
|
|
|
|
|
|
|
|
|
|
Сообщение является бинарным пакетом. Для работы с ним его для начала необходимо десериализовать. Для этого используется protocol buffer
|
|
|
|
|
|
|
|
|
|
После десериализации присутствует 4 поля:
|
|
|
|
|
|
|
|
|
|
1. Параметры заголовка, которые передаются с пакетом (например http-заголовки). Формат заголовка типа key:string=valye:string
|
2022-10-25 12:59:22 +03:00
|
|
|
|
2. Метаданные. В этом поле передаются служебные данные для самого SDK.
|
2022-10-23 20:12:23 +03:00
|
|
|
|
3. Бинарные данные, которые, которые передаются в функцию
|
2022-10-25 09:46:24 +03:00
|
|
|
|
|
|
|
|
|
# Сборка
|
|
|
|
|
|
|
|
|
|
## Подготовка пакетов
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
apt install protobuf-compiler
|
|
|
|
|
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Подготовка файлов
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
protoc --go_out=. ./protobuf/*
|
|
|
|
|
```
|
2022-11-28 10:13:52 +03:00
|
|
|
|
|
|
|
|
|
# Исользование
|
|
|
|
|
|
|
|
|
|
Пример использования:
|
|
|
|
|
|
|
|
|
|
```golang
|
|
|
|
|
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))
|
|
|
|
|
}
|
|
|
|
|
```
|