Как определить, успешно ли подключается ac# Grpc.Net.Client?

У нас есть клиенты gRPC, использующие пакет Grpc.Net.Client — когда служба создается и когда мы настраиваем асинхронный обратный вызов, не так просто узнать, запущены ли службы и правильно ли они подключены.

Наше текущее решение состоит в том, чтобы дождаться сбоя асинхронного вызова (через секунду или около того) через исключение HttpRequestException, а затем мы вернемся и попытаемся снова подписаться на службу в длинном цикле, пока мы не восстановим службу. Есть ли способ а) определить состояние службы еще до того, как мы попытаемся вызвать наш метод подписки, и б) есть ли лучший способ справиться с падением службы, чем перехватывать исключения и зацикливаться?

Обратите внимание, что даже если служба не работает, создание службы и вызов подписки работают и возвращаются без ошибок, а цикл foreach срабатывает, а затем через 1 секунду или около того генерируется исключение. Я действительно не хочу полагаться на заявление о сне!

Код выглядит примерно так:

      service = channel.CreateGrpcService<IManagedOrderGRPCService>();
while(true)
{
  var response = this.Subscribe(), default);
  await foreach (var update in response)
  {
     // Do something with the update
  }
  catch (Exception e)
  {
     log.LogWarning ($"[{Name}]:: Lost connection to service - for  [{e.Message}]");
  }
  Thread.Sleep (7000);
}

Для информации об объявлении службы (с использованием кода сначала gRPC, .net Core 5):

      [ServiceContract]
public interface IManagedOrderGRPCService
{
  [OperationContract]
  IAsyncEnumerable<ManagedOrderUpdate> Subscribe (CallContext context = default );
}

0 ответов

Другие вопросы по тегам