我希望下面的代码永远重试 ,但是在断开与网络的连接约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。我愿意根据需要更改软件包或框架。
答案 0 :(得分:0)
This answer to a related question使我步入正轨。事实证明,埋在EventHubClient
的类层次结构中,有对Service Bus程序包的MessagingFactory
的引用-它具有自己的每次操作超时,不会通过{公开{1}}类型。
因此,设置超时时间非常长的客户端的方法如下:
EventHubClient
话虽这么说,在确认此方法可行后,我意识到在我的情况下在重试期间发送遥测实际上很重要,因此我实际上回到了{{1}的默认重试策略},并使用the Polly library将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);
调用包装成单独的重试策略,使我可以在每次重试之前发送遥测信息。