考虑 Go gRPC 代码库中的示例:
func main() {
// Set up a connection to the server.
conn, err := grpc.Dial(address, grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
c := pb.NewGreeterClient(conn)
// Contact the server and print out its response.
name := defaultName
if len(os.Args) > 1 {
name = os.Args[1]
}
r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name})
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Printf("Greeting: %s", r.Message)
}
Run Code Online (Sandbox Code Playgroud)
当从另一个服务使用 gRPC 服务时,连接 ( conn)的范围应该是什么?我认为它应该与正在处理的请求的范围是消费者服务有密切关系,但我还没有找到任何关于此的文档。我应该在这里使用连接池吗?
例如
Agr*_*rim 11
根据经验,gRPC 客户端连接应该在客户端应用程序的生命周期内重复使用,因为它们可以安全地并发使用。此外,gRPC 的关键特性之一是远程过程调用的快速响应,如果您必须在收到每个请求时重新连接,则无法实现这一点。
尽管如此,强烈建议使用某种 gRPC 负载平衡以及这些持久连接。否则,大量负载可能最终会出现在一些长期存在的 grpc 客户端-服务器连接上。负载平衡选项包括:
| 归档时间: |
|
| 查看次数: |
11340 次 |
| 最近记录: |