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

NServiceBus 4.4.2 how do i set the TimeoutPersisterReceiver timespan in config

如何增加 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.

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

但是,我要补充一点,public 对此配置选项的访问权限在更高版本中已被删除,我不是 100% 确定原因。可能有龙。参见 http://bit.ly/1ToyOHb (GitHub)。

断路器行为

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

嵌入式断路器配置无法调整。如果发生错误,它是 armed 并且如果在 2 分钟内没有成功的轮询成功,将触发断路器操作,这将调用引发严重错误。

增加轮询间隔在这里没有帮助。如果您将轮询间隔设置为超过 2 分钟,断路器将始终 启动,从而触发操作。

不幸的是,除了构建您自己的完全删除断路器的版本之外,您无能为力。

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

严重错误处理

解决这种情况的唯一可能解决方案是挂接到关键错误处理程序。然后你知道发生了这样的问题并且可以关闭应用程序,因为我怀疑你目前是自托管的。

您也可以尝试创建一个全新的总线实例,然后 'swap' 用新的总线实例创建损坏的实例,但这是一项非常艰巨的任务,我建议 退出您的应用程序.