【发布时间】:2018-01-02 15:05:11
【问题描述】:
我有两个通过 gRPC 相互通信的微服务,A 是 RPC 客户端,B 是 RPC 服务器,它们都是使用 grpc NPM 模块在 NodeJS 中编写的。
一切正常,直到在某个时间点,A 意外停止向B 发送请求,由于超时(5 秒)而失败并抛出此错误:
Error: Deadline Exceeded
这两个微服务都是 Docker 容器,在 AWS ECS 上运行并通过 AWS ELB(不是 ALB,因为它不支持 HTTP2 和其他一些问题)进行通信。
我尝试从 EC2 实例和正在运行的 ECS 任务(Docker 容器本身)本身运行 telnet 从 A 到 B 的 ELB,它连接良好,但仍然是 NodeJS A 中的应用程序无法使用 gRPC 连接访问 B 中的 NodeJS 应用程序。
唯一的解决方法是停止并启动ECS任务,然后A成功再次连接到B(直到下一次意外再次出现相同的场景),但这当然不是解决方案.
有人遇到过这种问题吗?
【问题讨论】:
-
这个问题的结论是什么?您(以及如何)解决了吗?我目前遇到同样的问题。一个一元 grpc 调用的 Deadling 超过了,然后在那之后的每一个调用都开始失败?
-
遇到同样的问题,有什么解决办法吗?
标签: node.js amazon-web-services docker rpc grpc