«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Могу ли я получить доступ к нескольким службам gRPC через одно соединение?

Могу ли я получить доступ к нескольким службам gRPC через одно соединение?

Опубликовано 10 ноября 2024 г.
Просматривать:305

Can I Access Multiple gRPC Services over a Single Connection?

Доступ к нескольким службам gRPC через одно соединение

В сценариях, когда несколько служб gRPC расположены на одном сервере и прослушивают общий адрес, как в приведенном примере, это Может показаться излишним устанавливать отдельные подключения к каждой службе. Целью этой статьи является объяснение того, почему обычно требуются отдельные соединения, и исследуется, как использовать одно соединение для доступа к нескольким службам gRPC.

Устранение необходимости в нескольких соединениях

Для эффективного доступа к различным размещенным службам gRPC. на одном сервере вы можете использовать одно клиентское соединение gRPC. Этот подход включает в себя инициализацию объекта grpc.ClientConn и передачу его отдельным фабрикам сервисных клиентов, позволяя им использовать одно и то же базовое соединение(я).

func main() {
    cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    c1 := pb.NewSubscriberServiceClient(cc)
    c2 := pb.NewDropperServiceClient(cc)
}

Повторное использование сгенерированного кода из Protobuf

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

Использование интерфейса для удобства (необязательно)

Для случаев, когда службы имеют разные имена методов, вы можете объединить их в одну структуру для большего удобства.

type SubscriberDropper struct {
    pb.SubscriberServiceClient
    pb.DropperServiceClient
}

func main() {
    // ... as above ...
    sd := &SubscriberDropper{c1, c2}
}

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3