如何解决grpc Deadline Exceeded错误?

问题描述 投票:0回答:2

我有一个用go编写的grpc服务器和一个python客户端,有时会出现如下错误:

eggs/grpcio-1.0.0-py2.7-linux-x86_64.egg/grpc/_channel.py\", line 432, in _end_unary_response_blocking\n    raise _Rendezvous(state, None, None, deadline)\nInternalServerError: Deadline Exceeded\n"}

grpc 截止日期概念

gRPC 允许客户端在调用远程时指定截止时间值 方法。这指定了客户端想要等待多长时间 在 RPC 完成并出现错误之前来自服务器的响应 DEADLINE_EXCEEDED。在服务器端,服务器可以查询 截止日期以查看特定方法是否超时,或者超时了多少时间 剩下来完成该方法。

如何指定截止日期因语言而异 - 对于 例如,Python 中始终需要截止时间值,但并非所有 语言有默认的截止日期。

有办法解决这个错误吗?

python go protocol-buffers rpc grpc
2个回答
4
投票

正如上面评论中提到的,截止日期可以是客户端和服务器之间的任何东西,包括网络和服务器的实现。当您通过网络进行交谈时,偶尔会遇到截止日期,例如在包裹丢失期间。一般来说,您可以在这里执行以下操作:

  • 优化服务器实现以更快地处理您的请求。
  • 如果客户设定的截止日期很短,请增加此时间。
  • 通过以下方式优雅地处理截止日期错误:
    • 重试。只需确保使用指数退避,这样在服务器过载的情况下就不会让问题变得更糟。
    • 向上游报告错误。
    • 有时也可能会回退到不使用 grpc 调用并降低体验。

0
投票

参考- Spring Boot + gRPC 截止日期示例
根据 gRPC 文档,gRPC 客户端没有默认超时。所以 gRPC 客户端将无限期地等待。
因此,如果您收到超过截止日期的异常,则意味着在客户端已经使用 gRPC 截止时间配置了超时。
因此,如果您不想收到此异常,有 2 种解决方案 -

  1. 提高gRPC服务器性能,使gRPC客户端获得 在使用 gRPC 截止时间配置的超时之前响应。
  2. 增加使用 gRPC 截止时间配置的 gRPC 客户端超时。所以 gRPC 客户端将等待更多时间来获取服务器的响应。
© www.soinside.com 2019 - 2024. All rights reserved.