如何处理grpc客户端连接错误?

时间:2019-03-06 13:26:16

标签: c# grpc

请帮助我了解grpc客户端连接错误处理。

我以前使用过Micrsoft WCF。尝试多次连接很容易,如果没有服务接受输入连接,则放弃,如下所示:

// this is pseudo code
int attemptCount = 0;
while (true)
    try
    {
        client.Connect(); // exception is raised if there is not service listening for incoming connection 
        break;
    }
    catch (Exception)
    {
        client.Abort(); // to clear connection faulted state
        if (++attempCount == 5)
            throw;
        Thread.Wait(500); // waiting for service to start
    }

尝试5次连接,如果在某个IP:端口上没有监听的服务,则客户端应用程序将终止

当我同时从Visual Studio调试启动客户端和服务时使用了此功能,因此有时客户端首先启动,并且它必须等待服务启动。

我尝试使用gRPC客户端执行相同的操作,但是没有方法将channel.StateChannelState.TransientFailure重置回工作。我知道gRPC会在出现问题时在连接之间暂停:

  

对于许多非致命故障(例如,TCP连接尝试超时   (因为服务器尚不可用),渠道可能会花费   在这种状态下时间越来越长。   https://grpc.io/grpc-java/javadoc/io/grpc/ConnectivityState.html

我可以尝试使用WaitForStateChangedAsync,但是如何配置gRPC客户端在重新连接尝试之间等待一定的时间?

还有其他方法可以多次连接并终止gRPC的客户端吗?

谢谢

1 个答案:

答案 0 :(得分:0)

gRPC在内部对通道重新连接具有指数补偿控制。

我们确实有一些退避参数,其中一些可以通过通道参数进行配置。 https://github.com/grpc/grpc/blob/2bd7ad0112f56d2bdbc37d01a431c1e375039f2e/src/core/ext/filters/client_channel/subchannel.cc#L61

但是据我所知,我们没有任何参数可以控制最大尝试次数。请在https://github.com/grpc/grpc上提出功能请求,以便我们跟进。