即使服务器已启动,gRPC DEADLINE_EXCEEDED也是如此

时间:2018-01-02 15:05:11

标签: node.js amazon-web-services docker rpc grpc

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

一切正常,直到某个时间点,A意外停止向B发送请求,由于超时(5s)而失败并抛出此错误:

Error: Deadline Exceeded

两个微服务都是Docker容器,在AWS ECS上运行并通过AWS ELB进行通信(不是ALB,因为它不支持HTTP2和其他一些问题)。

我尝试从telnet运行AB的ELB,无论是来自EC2实例还是来自正在运行的ECS任务(Docker容器本身)本身,并且连接正常但是,A中的NodeJS应用程序无法使用gRPC连接到达B中的NodeJS应用程序。

解决它的唯一方法是停止并启动ECS任务,然后A成功再次连接到B(直到下一个意外时间再现相同的场景),但它&# 39;当然不是解决方案。

有人遇到过这类问题吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我发现我既需要创建一个新的存根,也需要在出现一些错误之后重新创建连接,以便重新连接。 (也在ECS中运行)