Как определить, успешно ли подключается 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 );
}