如何解决gRPC流维护
说我正在使用双向流,并且服务器可能已关闭或网络可能已关闭。如何在代码中维护gRPC流?换句话说,stream
中的stream,_ := myPbClient.Foo(context.Background())
是否可以被破坏?如果是这样,我需要怎么修理?刚获得一个新的?
编辑
我找到了grpc.CallOption
grpc.WaitForReady(true)
。根据其readme的描述:
如果发出了RPC,但通道处于TRANSIENT_FAILURE或SHUTDOWN状态,则无法迅速传输RPC。默认情况下,gRPC实现应立即使此类RPC失败。这被称为“快速失败”,但是该术语的使用是历史性的。由于通道处于其他状态(CONNECTING,READY或IDLE),RPC不应失败。
gRPC实现可以提供每个RPC选项,以使通道处于TRANSIENT_FAILURE状态不会使RPC失败。取而代之的是,实现将RPC排队,直到通道为READY。这就是所谓的“等待就绪”。如果有不相关的原因(例如,通道为SHUTDOWN或到达RPC的截止日期),则RPC仍应在READY之前失败。
因此,听起来好像如果我设置了grpc.WaitForReady(true)
,除非它处于SHUTDOWN
状态,否则流不会失败?如果是这样,grpc何时会处于SHUTDOWN
状态?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。