如何解决 grpc Deadline Exceeded 错误?

pan*_*ang 5 python rpc go protocol-buffers grpc

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

\n\n
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"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

grpc 截止日期概念\xef\xbc\x9a

\n\n
\n

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

\n\n

指定截止时间的方式因语言而异 - 例如,Python 中始终需要截止时间值,并且并非所有语言都有默认截止时间。

\n
\n\n

有办法解决这个错误吗?

\n

Chr*_*ian 4

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

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