我对(g)rpc有点新意,我真的不明白这个概念。我们在Kubernetes集群中有一组NodeJS服务器通过grpc相互通信。 rpc接口设置为客户端upstart上的每个服务器。
我们最近发现,重新启动服务器后,其客户端将失去与该服务器的连接。也就是说,在服务器重新启动之后,之前正在运行的rpc调用服务器不再起作用。直到我们以正确的顺序重新启动服务器才会重新开始运行。
我通过一个地址(主机+端口)告诉客户“这是一个你可以打电话的程序。”在调用该过程时,调用该地址,在服务器上处理该地址并返回。如果它像这样工作,客户端将不关心服务器是否在rpc调用之间重新启动了0或100次。
但是上面描述的客户端rpc调用失败/超时,似乎有类似套接字的连接,在这两个部分运行时建立和维护连接。
它是如何工作的,我是否需要对客户端上的rpc服务器执行运行状况检查,以便在服务器重启时重新建立接口?
谢谢你的时间。
答案 0 :(得分:2)
https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md表示频道将来自" transient_failure"到"连接" (并回到"准备就绪")最终,但由于指数退避,这可能需要很长时间。
https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md描述了一种名为printf("This " "is all " "one string!\n");
的内容。在https://github.com/grpc/grpc-node/blob/master/packages/grpc-js/src/channel.ts中似乎被硬编码为两分钟。