Skip to content

Latest commit

 

History

History
118 lines (83 loc) · 5.59 KB

File metadata and controls

118 lines (83 loc) · 5.59 KB

Создание проекта

Данный документ описывает создание минимально доступной рабочей структуры модуля расширения без реализации функционала RPC.

В будущем его можно использовать для обогащения операций необходимой логикой работы.

Создание шаблона проекта

Подключение модуля расширения к системе осуществляется с помощью следующих ключевых технологий:

Для создания проекта на golang необходимо установить sdk по следующей инструкции.

Далее в директории проекта необходимо инициализировать файл go.mod для загрузки внешних зависимостей с помощью команды go mod init <название_корневого_модуля_по_усмотрению>.

Подключение прото-файлов

Для работы сервиса необходимы прото-файлы. Полный набор прото-файлов можно найти в корне проекта sdk, в директории .proto.

Копия набора прото-файлов для RPC DebugAccess расположены в директории proto проекта.

Из данных прото-файлов необходимо сгенерировать код для корректной работы сервера, для этого рекомендуется использовать следующий набор утилит:

Для установки в Ubuntu 22.04:

apt-get update && \
apt install -y protobuf-compiler && \
apt clean
go env -w GOSUMDB=off
go env -w GO111MODULE=on
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.32.0 && \
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0

Рекомендуется использовать Makefile и утилиту make для работы с проектом, создадим его и распишем набор команд:

    MODULE_NAME=<название_корневого_модуля_по_усмотрению>
    gen:
        cd proto && \
        protoc --go_out=./.. \
        --go_opt=Mservice_service_manager.proto=${MODULE_NAME}/gen/cluster-contract \
        --go_opt=Mshared_service_instance.proto=${MODULE_NAME}/gen/cluster-contract \
        --go_opt=module=${MODULE_NAME} \
        --go-grpc_out=./.. \
        --go-grpc_opt=Mservice_service_manager.proto=${MODULE_NAME}/gen/cluster-contract \
        --go-grpc_opt=Mshared_service_instance.proto=${MODULE_NAME}/gen/cluster-contract \
        --go-grpc_opt=module=${MODULE_NAME} \
        service_service_manager.proto shared_service_instance.proto

    tidy:
        go mod tidy

    build: gen tidy
        CGO_ENABLED=0 go build -o bin

Сгенерировать код из прото-файлов можно с помощью команды make gen.

С помощью команды make build можно сбилдить проект.

Создание gRPC сервера

Для создания сервера gRPC в go нам необходимо:

  1. Создать структуру, которая будет реализовывать интерфейс сервиса, описанного в прото-файле.
// Инстанс сервиса с реализацией RPC.
type microservice struct {
    pb.UnimplementedServiceManagerServer
}

// RPC для проверки доступности сервиса при заведении.
func (r *microservice) DebugAccess(context.Context, *pb.DebugServiceAccessRequest) (*pb.DebugServiceAccessResponse, error) {
    //реализация rpc
    //...

    return nil, errors.New("not implemented")
}
  1. Создать сущность структуры сервиса, создать сущность сервера gRPC, связать их и запустить сервер.
func run() error {
    // Создаем инстанс сервиса.
    m := microservice{}

    // Создаем инстанс сервера.
    server := grpc.NewServer()

    // Регистрируем сервис.
    pb.RegisterServiceManagerServer(server, &m)

    // Создаем листененра.
    lis, err := net.Listen("tcp", listenPort)
    if err != nil {
        return fmt.Errorf("create listener: %s", err)
    }

    // Запускаем gRPC сервер.
    return server.Serve(lis)
}

На данном этапе пустой шаблон модуля расширения готов для локального запуска.

Для подключения модуля к системе необходимо настроить Dockerfile и docker-compose.yaml, подробную информацию об этом можно найти в директории deploy.

Пример готового шаблона модуля расширения находится в директории project.