为什么我的Event Hub指数重试策略不会永远持续下去?

时间:2018-07-04 16:50:27

标签: azure azureservicebus azure-eventhub

我希望下面的代码永远重试 ,但是在断开与网络的连接约40秒后,它始终会引发异常-这是我最好的模拟瞬态Internet连接或事件中心中断。

var eventHubClient = EventHubClient.CreateFromConnectionString(…);
eventHubClient.RetryPolicy = new RetryExponential(
    TimeSpan.FromSeconds(5), // minBackoff
    TimeSpan.FromMinutes(2), // maxBackoff
    Int32.MaxValue); // maxRetryCount
…
eventHubClient.SendAsync(…).Wait();

这是怎么回事?

我正在使用.NET Framework 4.6上的WindowsAzure.ServiceBus NuGet程序包,版本4.1.10。我愿意根据需要更改软件包或框架。

1 个答案:

答案 0 :(得分:0)

This answer to a related question使我步入正轨。事实证明,埋在EventHubClient的类层次结构中,有对Service Bus程序包的MessagingFactory的引用-它具有自己的每次操作超时,不会通过{公开{1}}类型。

因此,设置超时时间非常长的客户端的方法如下:

EventHubClient

话虽这么说,在确认此方法可行后,我意识到在我的情况下在重试期间发送遥测实际上很重要,因此我实际上回到了{{1}的默认重试策略},并使用the Polly libraryvar 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); 调用包装成单独的重试策略,使我可以在每次重试之前发送遥测信息。

相关问题