client

package
v1.62.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 31, 2025 License: MIT Imports: 17 Imported by: 0

README

Package client

Пакет client предоставляет гибкий gRPC-клиент с поддержкой балансировки нагрузки, middleware для логирования, метрик, трассировки и динамическим обновлением списка хостов.

Types

Client

Основная структура клиента для взаимодействия с gRPC-серверами. Поддерживает балансировку нагрузки, цепочки middleware и динамическое обновление списка хостов.

Methods:

New(initialHosts []string, opts ...Option) (*Client, error)

Создать новый клиент с указанными начальными хостами и опциями:

  • WithMiddlewares(middlewares ...request.Middleware) Option – добавить middleware в цепочку обработки запроса.
  • WithDialOptions(dialOptions ...grpc.DialOption) Option – опция для передачи параметров подключения gRPC (например, TLS, таймауты)
(cli *Client) Invoke(endpoint string) *request.Builder

Инициирует запрос к указанному эндпоинту. Возвращает билдер для выполнения запроса.

(cli *Client) Upgrade(hosts []string)

Атомарно обновить список хостов.

(cli *Client) Close() error

Закрыть соединение с сервером.

(cli *Client) BackendClient() isp.BackendServiceClient

Получить низкоуровневый клиент для прямого взаимодействия с gRPC-сервисом.

Functions

Default(restMiddlewares ...request.Middleware) (*Client, error)

Создать клиент с настройками по умолчанию:

  • Максимальный размер сообщения 64 МБ.
  • Middleware для генерации requestId, сбора метрик через grpc_metrics.ClientStorage и трейсинга
RequestId() request.Middleware

Middleware для автоматической генерации requestId для передачи в заголовках. Если в контексте будет указан requestId, то передаваться будет именно он.

Log(logger log.Logger, logBody bool) request.Middleware

Middleware для логирования запросов и ответов. Логирует тело запроса/ответа, если logBody = true.

Metrics(storage MetricStorage) request.Middleware

Middleware для сбора метрик длительности запросов.

Usage

Default usage flow
package main

import (
	"context"
	"log"

	"github.com/txix-open/isp-kit/grpc/client"
	log2 "github.com/txix-open/isp-kit/log"
)

type user struct {
	Id   string
	Name string
}

func main() {
	logger, err := log2.New()
	if err != nil {
		log.Fatal(err)
	}

	cli, err := client.Default(client.Log(logger, true))
	if err != nil {
		log.Fatal(err)
	}
	defer cli.Close()

	cli.Upgrade([]string{"host1:8080", "host2:9000"})

	users := make([]user, 0)
	err = cli.Invoke("/get_users").
		JsonResponseBody(&users).
		Do(context.Background())
	if err != nil {
		log.Fatal(err)
	}

	for _, u := range users {
		/* handle each user */
	}
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Log

func Log(logger log.Logger, logBody bool) request.Middleware

func Metrics

func Metrics(storage MetricStorage) request.Middleware

func RequestId

func RequestId() request.Middleware

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

func Default

func Default(restMiddlewares ...request.Middleware) (*Client, error)

func New

func New(initialHosts []string, opts ...Option) (*Client, error)

func (*Client) BackendClient

func (cli *Client) BackendClient() isp.BackendServiceClient

nolint:ireturn

func (*Client) Close

func (cli *Client) Close() error

func (*Client) Invoke

func (cli *Client) Invoke(endpoint string) *request.Builder

func (*Client) Upgrade

func (cli *Client) Upgrade(hosts []string)

type MetricStorage

type MetricStorage interface {
	ObserveDuration(endpoint string, duration time.Duration)
}

type Option

type Option func(cli *Client)

func WithDialOptions

func WithDialOptions(dialOptions ...grpc.DialOption) Option

func WithMiddlewares

func WithMiddlewares(middlewares ...request.Middleware) Option

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL