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