1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/baetyl-baetyl-go

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

baetyl-go

codecov Go Report Card License

Golang SDK для BAETYL V2

Если вы работаете с BAETYL V1, используйте старый SDK.

Документация baetyl-go

Вы можете использовать Baetyl SDK для разработки модулей на языке Go. Он находится в репозитории baetyl-go. Основной функциональный интерфейс — это контекст.

На данный момент предоставляемые возможности SDK ещё достаточно ограничены, но они будут постепенно усиливаться в будущем. В будущем будет поддерживаться и другие языки программирования.

1. Версия

версия: git-6a9a8f8

2. Базовая функциональность

Пользовательские модули, разработанные самостоятельно, могут получить доступ к функциям, предоставленным 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/baetyl-baetyl-go.git
git@api.gitlife.ru:oschina-mirror/baetyl-baetyl-go.git
oschina-mirror
baetyl-baetyl-go
baetyl-baetyl-go
master