在多个 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 提供更高效、更优化的客户端实现应用程序。
以上是是否可以通过单个连接访问多个gRPC服务?的详细内容。更多信息请关注PHP中文网其他相关文章!