You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
loveckiy.ivan
db2331a573
|
11 months ago | |
---|---|---|
.idea | 11 months ago | |
multiresolver | 11 months ago | |
vendor | 11 months ago | |
README.md | 11 months ago | |
go.mod | 11 months ago | |
go.sum | 11 months ago | |
grpcbalancer.go | 11 months ago | |
options.go | 11 months ago | |
policy.go | 11 months ago | |
workers.go | 11 months ago | |
wrapper.go | 11 months ago |
README.md
GrpcBalancer
Пакет для подключения к сервисам по GRPC.
Функционал пакета
В сравнении со стандартным подключением grpc.ClientConn
пакет grpcbalancer
предоставляет следующие дополнительные возможности:
- балансировка между несколькими DNS-адресами сервиса.
С версии v1.3.2
:
- автоматические фоновые health check’и с переподключением в случае недоступности сервиса;
- периодический мягкий реконнект, позволяющий задействовать весь текущий пул подов сервиса и перебалансировать соединения при начальном неравномерном распределении при деплое;
- принудительный health check (опционально) перед вызовом метода сервиса.
С версии v1.3.3
:
- корректная работа созданного ранее подключения после переустановки соединения без необходимости заново запрашивать подключение методом
balancer.Conn(ctx)
.
Опции инициализации
Опция | Назначение |
---|---|
WithUrls(target ...string) |
URL(ы) сервиса, к которому подключаемся |
WithInsecure() |
разрешает небезопасные подключения |
WithTimeout(timeout time.Duration) |
таймаут установки соединения, 0 = значение по умолчанию |
WithBalancingMode(bp BalancingPolicy) |
режим балансировки (пока поддерживается только round-robin) |
WithForceHeathCheck(timeout time.Duration) |
проводить health check перед каждым запросом, 0 = таймаут по умолчанию |
При вызове методов сервиса в случае, если в контексте не задан таймаут, устанавливается таймаут по умолчанию.
Использование
Инициализация
import gitlab-private.wildberries.ru/wbpay-go/packages/grpcbalancer
balancer, err := grpcbalancer.New(
grpcbalancer.WithUrls(url_to_svc),
grpcbalancer.WithInsecure(),
)
Вызов метода
conn, err := balancer.Conn(ctx)
res, err := conn.SomeMethod(ctx, request)
Рекомендуемым является вариант, при котором перед каждым вызовом метода сервиса сначала получаем подключение методом balancer.Conn(ctx)
.