В сценариях, когда несколько служб 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) }
Сгенерированный код 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