Как обрабатывать ошибки подключения клиента GRPC? - PullRequest
0 голосов
/ 06 марта 2019

Пожалуйста, помогите мне разобраться с обработкой ошибок соединения клиента 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-адресе: порт

Это использовалось, когда у меня клиент и служба запущены из отладки VisualStudio одновременно, поэтому иногда клиент запускается первым и ему приходится ждать запуска службы.

IЯ пытался сделать то же самое с помощью клиента gRPC, но нет способа вернуть channel.State из ChannelState.TransientFailure обратно в рабочее состояние.Я знаю, что gRPC делает паузы между соединениями, если что-то не так:

При многих нефатальных сбоях (например, при попытке TCP-соединения отключиться из-за того, что сервер еще не доступен), канал может потратить все большебольшое количество времени в этом состоянии.https://grpc.io/grpc-java/javadoc/io/grpc/ConnectivityState.html

Я могу попытаться использовать WaitForStateChangedAsync, но как я могу настроить клиент gRPC для ожидания определенного количества времени между попытками переподключения?

Есть ли другой способподключиться несколько раз и завершить работу клиента для gRPC?

Спасибо

1 Ответ

0 голосов
/ 06 марта 2019

gRPC имеет экспоненциальное управление отсрочкой при внутреннем переподключении канала.

У нас есть некоторые параметры отката, и некоторые из них можно настроить с помощью аргументов канала.https://github.com/grpc/grpc/blob/2bd7ad0112f56d2bdbc37d01a431c1e375039f2e/src/core/ext/filters/client_channel/subchannel.cc#L61

Но у нас нет никаких параметров, чтобы контролировать максимальное время попытки, насколько я знаю.Пожалуйста, отправьте запрос функции на https://github.com/grpc/grpc, чтобы мы могли продолжить.

...