为什么我的事件中心指数重试策略不会永远持续下去?
Why does my Event Hub exponential retry policy not continue forever?
我希望以下代码 永远 重试,但它在与网络断开连接约 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。如果需要,我愿意更改包或框架。
This answer to a related question 让我走上正轨。事实证明,在 EventHubClient
的 class 层次结构中,有一个对服务总线包的 MessagingFactory
的引用——它有自己的 每个操作超时未通过 EventHubClient
类型 .
公开
所以设置超时时间很长的客户端的方法是这样的:
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
上,并使用 the Polly library 将 SendAsync(…)
调用与单独的重试策略包装在一起,允许我在每次重试之前发送遥测数据。
我希望以下代码 永远 重试,但它在与网络断开连接约 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。如果需要,我愿意更改包或框架。
This answer to a related question 让我走上正轨。事实证明,在 EventHubClient
的 class 层次结构中,有一个对服务总线包的 MessagingFactory
的引用——它有自己的 每个操作超时未通过 EventHubClient
类型 .
所以设置超时时间很长的客户端的方法是这样的:
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
上,并使用 the Polly library 将 SendAsync(…)
调用与单独的重试策略包装在一起,允许我在每次重试之前发送遥测数据。