Этот ответ на связанный вопрос поставил меня на правильный путь. Оказывается, что, скрытый внутри иерархии классов для EventHubClient
, есть ссылка на пакет MessagingFactory
пакета служебной шины, который имеет свое собственное время ожидания для каждой операции, которое не отображается через тип EventHubClient
1007 *.
Таким образом, способ настроить клиента с очень длительным тайм-аутом будет выглядеть примерно так:
var builder = new ServiceBusConnectionStringBuilder(connectionString)
{
OperationTimeout = TimeSpan.FromDays(30), // TimeSpan.MaxValue is not allowed
TransportType = TransportType.Amqp // This needs to be set; default is NetMessaging
};
var messagingFactory = MessagingFactory.CreateFromConnectionString(builder.ToString());
var eventHubClient = messagingFactory.CreateEventHubClient(entityPath);
eventHubClient.RetryPolicy = new RetryExponential(
TimeSpan.FromSeconds(5),
TimeSpan.FromMinutes(2),
Int32.MaxValue);
При этом, после проверки того, что это работает, я понял, что в моем сценарии действительно важно отправлять телеметрию во время повторных попыток, поэтому я фактически вернулся к политике повторения по умолчанию на EventHubClient
и просто обернул вызов SendAsync(…)
отдельной политикой повторения, используя библиотеку Полли , которая позволяет мне отправлять телеметрию перед каждой повторной попыткой.