Если вы работаете с BAETYL V1, используйте старый SDK.
Вы можете использовать Baetyl SDK для разработки модулей на языке Go. Он находится в репозитории baetyl-go. Основной функциональный интерфейс — это контекст.
На данный момент предоставляемые возможности SDK ещё достаточно ограничены, но они будут постепенно усиливаться в будущем. В будущем будет поддерживаться и другие языки программирования.
версия: git-6a9a8f8
Пользовательские модули, разработанные самостоятельно, могут получить доступ к функциям, предоставленным baetyl SDK, при запуске через контекст, определённый библиотекой baetyl-go.
Метод вызова:
context.Run(func(ctx context.Context) error {
// бизнес-логика
......
return nil
})
Контекст API:```go // Execution context // The execution context of the Baetyl service type Context interface { // NodeName returns the node name from the data. NodeName() string // AppName returns the application name from the data. AppName() string // AppVersion returns the application version from the data. AppVersion() string // ServiceName returns the service name from the data. ServiceName() string // ConfFile returns the configuration file from the data. ConfFile() string
// SystemConfig returns the Baetyl system configuration from the data.
SystemConfig() *SystemConfig
// Log returns the logger interface.
Log() *log.Logger
// Wait waits for termination by receiving signals SIGTERM and SIGINT.
Wait()
// WaitChan returns the wait channel.
WaitChan() <-chan os.Signal
}
// Load retrieves the value stored in the map for a key or returns nil if no such value exists.
// The result ok indicates whether a value was found in the map.
Load(key interface{}) (value interface{}, ok bool)
// Store sets the value for a key.
Store(key, value interface{})
// LoadOrStore returns an existing value for a key if one exists.
// Otherwise it stores and returns the given value.
// The result loaded equals true if the value was loaded, and false if it was saved.
LoadOrStore(key, value interface{}) (actual interface{}, loaded bool)
// Delete removes the value for a key.
Delete(key interface{})
```
```md
## 3. Examples
The following are examples of using the function module in baetyl-go.
Project address: [baetyl-function](https://github.com/baetyl/baetyl-function/blob/master/cmd/main.go)
``````go
// Конфигурация: функция
type Config struct {
Server http.ServerConfig `yaml:"server" json:"server"`
Client ClientConfig `yaml:"client" json:"client"`
}
type ClientConfig struct {
Grpc GrpcConfig `yaml:"grpc" json:"grpc"`
}
type GrpcConfig struct {
Port int `yaml:"port" json:"port" default:"80"`
Timeout time.Duration `yaml:"timeout" json:"timeout" default:"5m"`
Retries int `yaml:"retries" json:"retries" default:"3"`
}
// Входная точка программы
func main() {
// запуск сервиса через контекст baetyl-go
context.Run(func(ctx context.Context) error {
// проверка наличия системного сертификата
if err := ctx.CheckSystemCert(); err != nil {
return err
}
var cfg Config
// загрузка пользовательской конфигурации
err := ctx.LoadCustomConfig(&cfg)
if err != nil {
return errors.Trace(err)
}
// создание парсера для получения режима выполнения текущего приложения через context.RunMode()
resolver, err := resolve.New(context.RunMode(), ctx)
if err != nil {
return errors.Trace(err)
}
defer resolver.Close()
// создание и запуск функционального HTTP-сервиса
api, err := function.NewAPI(cfg, ctx, resolver)
if err != nil {
return errors.Trace(err)
}
defer api.Close()
// ждать завершения, слушая сигналы SIGTERM и SIGINT
ctx.Wait()
return nil
})
}
``````markdown
Файл конфигурации функции
``````yaml
сервер: # конфигурация сервера. Модуль Runtimes, который проксирует запросы к бэкенд-системе
адрес: ":50011" # адрес прослушивания
параллелизм: # количество одновременных соединений на стороне сервера, если значение не указано, используется значение по умолчанию
отключить_keepalive: true # включение режима keep-alive, значение по умолчанию — false
tcp_keepalive: false # отправка keep-alive пакетов, значение по умолчанию — false
максимальный_размер_запроса: # максимальный размер тела запроса, значение по умолчанию — 4 * 1024 * 1024 байт
время_ожидания_чтения: 1ч # время ожидания чтения соединения сервера, значение по умолчанию — неограниченное время
время_ожидания_записи: 1ч # время ожидания записи соединения сервера, значение по умолчанию — неограниченное время
время_ожидания_пустого_соединения: 1ч # время ожидания пустого соединения при активированном режиме keep-alive, если значение равно 0, используется время мультиплексного чтения
ca: пример/вр/либ/баэтел/тестсерта/ca.crt # путь к сертификату CA сервера
ключ: пример/вр/либ/баэтел/тестсерта/сервер.ключ # путь к закрытому ключу сервера
сертификат: пример/вр/либ/баэтел/тестсерта/сервер.сrt # путь к открытому ключу сервера
```
Учитывая правила перевода, было решено оставить названия параметров без изменения, чтобы они соответствовали стандартам конфигурационных файлов YAML.клиент: # настройки клиента для модуля Runtimes бэкенд-системы
grpc: # настройки клиента gRPC
порт: 80 # порт Runtimes
таймаут: 5 минут # таймаут запроса
попытки: 3 # количество повторных попыток запроса
логгер: # логгирование
уровень: info # уровень логгирования
## 4. Другие методы
Этот раздел представляет особенности и функциональность некоторых полезных пакетов.
Дополнительные API можно найти с помощью инструмента godoc. В разделе 5 показано, как установить и использовать godoc.
### 4.1 пакет контекста
#### 4.1.1 окружение
```go
// HostPathLib возвращает HostPathLib
func HostPathLib() (string, error)
// RunMode возвращает режим запуска edge.
func RunMode() string
// EdgeNamespace возвращает пространство имён edge.
func EdgeNamespace() string
// EdgeSystemNamespace возвращает системное пространство имён edge.
func EdgeSystemNamespace() string
// BrokerPort возвращает порт брокера.
func BrokerPort() string
// FunctionHttpPort возвращает HTTP-порт функции.
func FunctionHttpPort() string
// BrokerHost возвращает хост брокера.
func BrokerHost() string
// FunctionHost возвращает хост функции.
func FunctionHost() string
```
#### 4.1.2 платформа
```go
// возвращает информацию о платформе
// specs.Platform{
// ОС: runtime.GOOS,
// Архитектура: runtime.GOARCH,
// // Поле Variant будет пустым, если архитектура != ARM.
// Variant: cpuVariant,
// }
func Platform() PlatformInfo
// Возвращает строку информации о платформе в следующем формате
// "%s-%s-%s", pl.OS, pl.Architecture, pl.Variant
func PlatformString() string
```### 4.2 Пакет `http`
Этот пакет предоставляет сервис HTTP. Вы можете использовать его для быстрой инициализации, запуска сервера/клиента HTTP, инициирования запросов HTTP и выполнения других функций.
#### 4.2.1 Клиент
```go
// NewClient создаёт новый HTTP-клиент
func NewClient(ops *ClientOptions) *Client
// Call вызывает функцию через HTTP POST
func (c *Client) Call(function string, payload []byte) ([]byte, error)
// PostJSON отправляет данные с типом содержимого JSON
func (c *Client) PostJSON(url string, payload []byte, headers ...map[string]string)
// GetJSON получает данные с типом содержимого JSON
func (c *Client) GetJSON(url string, headers ...map[string]string) ([]byte, error)
func (c *Client) GetURL(url string, header ...map[string]string)
func (c *Client) PostURL(url string, body io.Reader, header ...map[string]string)
func (c *Client) SendUrl(method, url string, body io.Reader, header ...map[string]string)
```
#### 4.2.2 Сервер
```go
// NewServer создаёт новый сервер
func NewServer(cfg ServerConfig, handler fasthttp.RequestHandler) *Server
func (s *Server) Start()
func (s *Server) Close()
```
## 4.3 Пакет `pki`
Пакет `pki` упаковывает генерацию и выпуск сертификатов в Go для предоставления более удобных функций работы с сертификатами.
* Поддерживает выпуск корневых сертификатов
* Поддерживает выпуск самоподписанных корневых сертификатов
* Поддерживает выпуск подсертификатов
* Поддерживает выпуск подсертификатов с указанными приватными ключами
## 4.4 Пакет `pubsub`
Этот пакет предоставляет механизм очереди сообщений на основе памяти, поддерживающий публикацию и подписку.* Поддерживает подписку и отмену подписки на темы
* Поддерживает публикацию новостей
* Предоставляет исполнителя, который может быстро запустить процессор приема сообщений с возможностью установки времени ожидания
## 4.5 Пакет плагины
Этот пакет предоставляет механизм регистрации на основе шаблонного режима.
## 4.6 Пакет инструменты
Этот пакет предоставляет образец программы для выпуска сертификатов.
## 4.7 Пакет utils
Этот пакет предоставляет вспомогательные функции.
* Парсинг сертификатов
* Парсинг конфигураций
* Установка значений по умолчанию
* Отслеживание логов
* Поддержка сжатия в ZIP
## 4.8 Пакет dmcontext
Функции контекста, предоставляющие возможности управления устройствами
# 5. GoDoc
Как найти документацию API используя godoc
1. Установите godoc `go get golang.org/x/tools/cmd/godoc`
2. Убедитесь, что godoc находится в пути gosrc
3. godoc -http=:6060 Интерфейс устанавливается в соответствии с实际情况
4. Посетите следующий адрес в браузере `http://0.0.0.0:6060/pkg/`
5. Проверьте документацию baetyl-go
Примечание: В последнем пункте "The interface is set according to the actual situation" переведено как "Интерфейс устанавливается в соответствии с实际情况", но поскольку实际情况 (situation in reality) не был указан в исходном тексте, было решено оставить это без перевода, чтобы избежать ошибочного перевода незнакомого текста.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )