gRPC DEADLINE_EXCEEDED 即使服务器已启动并且

Shl*_*son 5 rpc amazon-web-services node.js docker grpc

我有两个微服务进行通信的相互通gRPCA是RPC客户端和B是RPC服务器,包括书面使用的NodeJS GRPC NPM模块。

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

Error: Deadline Exceeded

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

我试图运行telnetA到的ELB B,无论是从EC2实例,在运行ECS任务(泊坞容器本身)本身和它连接的罚款,但还是在的NodeJS应用程序A不能达到的的NodeJS应用程序B使用GRPC连接.

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

有没有人遇到过这种问题?

小智 0

你使用一元API还是流API?你设定任何期限吗?gRPC 截止时间是针对每个流的,因此在设置 X 毫秒截止时间时进行流式传输时,您将在打开流后得到 DEADLINE_EXCEEDED X 毫秒(不发送或接收任何消息!)。并且您将永远为此流获取它,摆脱它的唯一方法是重新打开流。