- Notifications
You must be signed in to change notification settings - Fork0
Набор преднастроенных библиотек для быстрого создания микро-сервисов на go.
License
updevru/go-micro-kit
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Набор преднастроенных бибилотек для быстрого создания микро-сервисов на go.
Набор инструментов создан для Schema-First подхода, когда описываются сервисы в формаетprotocol buffersформате и далее генерируется код этих сервисов.
Удобный запуск нескольких сервисов в одном приложении (например gRPC и HTTP API на разных портах).
Генерация gRPC API из protobuf и автоматическое создание HTTP API с помощьюgRPC-Gateway.
Конфигурация на основе env переменных или .env файлов, это позволяет удобно запускать сервисы в виде контейнеров.
Простой функционал для запуска фоновых задач по расписанию.
Автоматическая регистрация сервиса в системах service discovery (Consul).
Трассировка, метрики и логи в форметOpenTelemetry.
go get github.com/updevru/go-micro-kit
Установка утилит:
$ go install \ github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \ github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \ google.golang.org/protobuf/cmd/protoc-gen-go \ google.golang.org/grpc/cmd/protoc-gen-go-grpc
Установленные утилиты должны находиться в папке, на которую указывает переменная окружения$GOBIN
.
Пример генерации кода:
protoc -I proto .\proto\store\store.proto\ --go_out=./gen/ --go_opt=paths=source_relative --go-grpc_out=./gen/ --go-grpc_opt=paths=source_relative\ --grpc-gateway_out ./gen --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true\ --openapiv2_out ./docs --openapiv2_opt allow_merge=true,merge_file_name=api
Команда генерирует весь необходимый go код, gRPC-Gateway и openapi спецификацию.
funcmain() {// Единый context, который закрывается при завершении программыctx,stop:=signal.NotifyContext(context.Background(),os.Interrupt,syscall.SIGTERM)deferstop()// Инициализируем конфигурацию и наполняем структуру переменными окруженияvarcfg config.Configiferr:=configPkg.CreateConfig(ctx,&cfg);err!=nil {panic(err)}// Настройка OpenTelemetryotelShutdown,err:=telemetry.SetupOTelSDK(ctx)iferr!=nil {panic(err)}deferfunc() {err=errors.Join(err,otelShutdown(context.Background()))}()logger:=telemetry.CreateLogger()tracer:=telemetry.CreateTracer()meter:=telemetry.CreateMeter()// Создаем Bootstrap managerapp:=server.NewServer(ctx,logger,tracer,meter)// Инифализируем и добавляем gRPC сервисыapp.Grpc(&cfg.Grpc,func(g*grpc.Server) {pbStore.RegisterStoreServer(g) })//Инициализируем и добавляем gRPC-Gateway, так же можем добавить дополнительные роутыapp.Http(&cfg.Http,&cfg.Grpc,func(ctx context.Context,mux*runtime.ServeMux,conn*grpc.ClientConn)error {return []server.HttpHandler{pbStore.RegisterStoreHandler, } })// Добавляем фоновые задачи по расписаниюapp.Cron([]server.CronTask{ {Name:"clock",Cron:"*/1 * * * *",Fn:func(ctx context.Context)error {// TODO: implement cron jobreturnnil }, }, })// Добавляем автоматический service discoveryconsul,err:=discovery.NewConsul(&cfg.App,&cfg.Http,&cfg.Grpc)app.AddDiscovery(consul)// Запуск приложенияiferr:=app.Run();err!=nil {logger.ErrorContext(ctx,"Failed to run server: %v",err)panic(err)}}
Используются библиотекиgo-envconfig иgodotenv.
package configimport"github.com/updevru/go-micro-kit/config"typeConfigstruct {config.AppHttp config.Http`env:",prefix=HTTP_"`Grpc config.Grpc`env:",prefix=GRPC_"`Optionstring`env:"OPTION, default=value"`}
About
Набор преднастроенных библиотек для быстрого создания микро-сервисов на go.