1

重现步骤

  1. 启动服务器
  2. 向服务器发送客户端 RPC
  3. 重启服务器
  4. 使用同一个客户端,发送另一个 RPC。调用会失败
  5. 发送另一个 RPC,这个调用会成功

我还发现,如果服务器在重新启动之前长时间停止,第 5 步中的调用也会返回“通道处于状态 TRANSIENT_FAILURE”。

示例代码:https ://github.com/whs/grpc-repro (从 requirements.txt 安装,然后运行 ​​main.py)

预期结果

所有调用都应该成功。

使用 Python grpcio==1.19.0 服务器/客户端和 go-grpc 服务器测试。我尝试设置 grpc.max_connection_age_grace_ms、grpc.max_connection_age_ms、grpc.max_connection_idle_ms、grpc.keepalive_time_ms、grpc.keepalive_permit_without_calls 但它们似乎没有帮助。

4

1 回答 1

1

该问题与https://groups.google.com/forum/#!msg/grpc-io/199V_iF0NMw/NahHz_vMBwAJ重复。


您想要的功能可能是“ wait_for_ready ”。在 TRANSIENT_FAILURE(服务器暂时不可用)的情况下,它会自动等待通道再次变为 READY 而不会失败。阅读更多关于等待准备好的信息。

于 2019-04-17T18:04:39.423 回答