在多个 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) }
pb.go 文件中提供的生成的 gRPC 代码包含执行 RPC 所需的所有功能。因此,不需要额外的客户端实现,除非需要在每次调用期间自动执行特定逻辑。
对于服务具有不同功能的情况方法名称,您可以将它们合并到一个结构中以增加便利。
type SubscriberDropper struct { pb.SubscriberServiceClient pb.DropperServiceClient } func main() { // ... as above ... sd := &SubscriberDropper{c1, c2} }
通过利用此方法,您可以消除冗余连接建立,从而为 gRPC 应用程序提供更高效、更优化的客户端实现。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3