util.go

Обзор

Файл util.go содержит утилитную функцию для создания и настройки gRPC-клиентского подключения с поддержкой механизма повторных попыток (retry). Основная задача функции – облегчить установку соединения с gRPC-сервером, обеспечивая при этом надежность вызовов через автоматическую повторную отправку запросов при временных ошибках.

Функциональность файла полезна в распределенных системах и микросервисах, где сетевые сбои или временные неполадки могут приводить к неудачным RPC-вызовам. Использование встроенного механизма повторных попыток снижает необходимость писать подобную логику в каждом клиентском сервисе.


Подробное описание

Функция GetGRPCConnection

func GetGRPCConnection(address string) (*grpc.ClientConn, error)

Назначение

Создаёт и возвращает gRPC клиентское подключение к серверу по заданному адресу с преднастройками для повторных попыток и увеличенного максимального размера сообщений.

Параметры

Возвращаемые значения

Описание работы

  1. Конфигурируются опции повторных попыток:

    • Максимум 3 попытки.

    • Линейный бэкофф с задержкой 1 секунда между попытками.

  2. Создаются Unary и Stream интерсепторы, которые оборачивают вызовы клиента и реализуют логику повторных попыток.

  3. Устанавливаются максимальные размеры сообщений на прием и отправку — по 100 МБ, что позволяет работать с большими payload.

  4. Включается небезопасное транспортное соединение (без TLS) через insecure.NewCredentials(). Это удобно для локальной разработки или доверенных сетей.

  5. Собираются все опции и вызывается grpc.NewClient() для создания соединения.

Пример использования

conn, err := utils.GetGRPCConnection("localhost:50051")
if err != nil {
    log.Fatalf("Failed to connect: %v", err)
}
defer conn.Close()

// Создаем клиент и вызываем методы сервиса
client := pb.NewMyServiceClient(conn)
response, err := client.MyMethod(context.Background(), &pb.MyRequest{})
if err != nil {
    log.Printf("RPC call failed: %v", err)
}

Важные детали реализации


Взаимодействие с другими частями системы


Mermaid диаграмма

Ниже представлена диаграмма в формате flowchart, отображающая основные функции и их связи в файле util.go:

flowchart TD
    A[GetGRPCConnection(address)] --> B[Настройка retry опций]
    B --> C[Создание Unary Interceptor с retry]
    B --> D[Создание Stream Interceptor с retry]
    C --> E[Формирование grpc.DialOption для Unary]
    D --> F[Формирование grpc.DialOption для Stream]
    E & F --> G[Установка MaxCallRecvMsgSize и MaxCallSendMsgSize]
    G --> H[Добавление insecure транспортных credentials]
    H --> I[Вызов grpc.NewClient с опциями]
    I --> J[Возврат *grpc.ClientConn или error]

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