我有两个通过gRPC相互通信的微服务,A是RPC客户端,B是RPC服务器,两者均使用grpc NPM模块以NodeJS编写。

一切运行良好,直到在某个时间点A意外停止能够向B发送请求,由于超时(5s)而失败并抛出此错误:
Error: Deadline Exceeded
这两个微服务都是Docker容器,在AWS ECS上运行并通过AWS ELB(不是ALB,因为它不支持HTTP2和其他一些问题)进行通信。

我尝试从EC2实例和正在运行的ECS任务(Docker容器本身)本身从telnetA的ELB运行B,并且连接正常,但是A中的NodeJS应用程序仍然无法访问使用gRPC连接的B

解决此问题的唯一方法是停止并启动ECS任务,然后A成功再次连接到B(直到下一次出现相同场景的非预期时间),但这当然不是解决方案。

有人遇到这种问题吗?

最佳答案

您使用一元API还是流式API?你设定任何截止日期吗?
gRPC截止期限是按流的,因此,如果在设置X毫秒截止期限时进行流传输,则在打开流(不发送或接收任何消息!)后,您将获得DEADLINE_EXCEEDED X毫秒。而且您将永远获得该流的永久性,摆脱它的唯一方法是重新打开流。

关于node.js - gRPC DEADLINE_EXCEEDED,即使服务器已启动并且,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48063256/

10-13 21:39