如何增加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.
答案 0 :(得分:1)
在研究代码后,您似乎可以通过TimeoutPersisterReceiver.SecondsToSleepBetweenPolls
配置超时轮询间隔,但这并不重要。
无法调整嵌入式断路器配置。如果发生错误,则布防,如果在2分钟内没有成功的轮询成功,则会触发断路器动作,这会调用引发严重错误。
增加轮询间隔对此没有帮助。如果您将轮询间隔超过2分钟,则断路器将始终布防,从而触发操作。
除了构建自己完全拆除断路器的版本之外,没有什么可以做到的。
当您的数据库服务器执行故障转移时,此行为可能会导致问题。
解决此问题的唯一可能解决方案是挂钩到关键错误处理程序。然后你就知道会出现这样的问题并且可以关闭应用程序,因为我怀疑你目前正在自托管。
你也可以尝试创建一个全新的总线实例,然后用新的总线实例“交换”这个实例,但这是一个非常艰巨的任务,我建议退出你的应用程序。 / p>
答案 1 :(得分:0)
您可以尝试在实现IWantToRunWhenBusStartsAndStops的类中配置它,并使用TimeoutPersisterReceiver的SecondsToSleepBetweenPolls属性。
但是,我想补充一点,在以后的版本中删除了对此配置选项的公共访问权限,并且我不能100%确定原因。可能有龙。见http://bit.ly/1ToyOHb(GitHub)。