NServiceBus 4.4.2如何在config中设置TimeoutPersisterReceiver时间跨度

时间:2016-02-16 21:15:30

标签: c# nservicebus

如何增加TimeoutPersisterReceiver的时间跨度?它目前在射击前武装后重试约1分钟。我查看了文档,但看不到它的配置设置。

我们遇到了一些网络问题,导致服务无法与数据库通信,从而导致RepeatedFailuresOverTimeCircuitBreaker武装起来。

 INFO  NServiceBus.CircuitBreakers.RepeatedFailuresOverTimeCircuitBreaker [(null)] - The circuit breaker for TimeoutStorageConnectivity is now in the armed state

数据库最终将恢复在线状态,但是当断路器被触发并且总线已被处理时。我需要增加NServiceBus.Timeout.Hosting.Windows.TimeoutPersisterReceiver

的时间跨度
NServiceBus.CircuitBreakers.RepeatedFailuresOverTimeCircuitBreaker [(null)] - The circuit breaker for TimeoutStorageConnectivity will now be triggered
FATAL NServiceBus [(null)] - Repeated failures when fetching timeouts from storage, endpoint will be terminated.

2 个答案:

答案 0 :(得分:1)

断路器行为

在研究代码后,您似乎可以通过TimeoutPersisterReceiver.SecondsToSleepBetweenPolls配置超时轮询间隔,但这并不重要。

无法调整嵌入式断路器配置。如果发生错误,则布防,如果在2分钟内没有成功的轮询成功,则会触发断路器动作,这会调用引发严重错误。

增加轮询间隔对此没有帮助。如果您将轮询间隔超过2分钟,则断路器将始终布防,从而触发操作。

除了构建自己完全拆除断路器的版本之外,没有什么可以做到的。

当您的数据库服务器执行故障转移时,此行为可能会导致问题。

严重错误处理

解决此问题的唯一可能解决方案是挂钩到关键错误处理程序。然后你就知道会出现这样的问题并且可以关闭应用程序,因为我怀疑你目前正在自托管。

你也可以尝试创建一个全新的总线实例,然后用新的总线实例“交换”这个实例,但这是一个非常艰巨的任务,我建议退出你的应用程序。 / p>

答案 1 :(得分:0)

您可以尝试在实现IWantToRunWhenBusStartsAndStops的类中配置它,并使用TimeoutPersisterReceiver的SecondsToSleepBetweenPolls属性。

但是,我想补充一点,在以后的版本中删除了对此配置选项的公共访问权限,并且我不能100%确定原因。可能有龙。见http://bit.ly/1ToyOHb(GitHub)。