gpt4 book ai didi

nservicebus - 如何阻止 NServiceBus 重试未引发异常的消息?

转载 作者:行者123 更新时间:2023-12-01 03:45:24 28 4
gpt4 key购买 nike

我遇到了与重试相关的行为,在我尝试过的文档或搜索中找不到任何引用。基本上,如果我的处理程序处理消息的时间超过 60 秒(注意它不会引发异常),NServiceBus 会触发另一个处理程序来处理相同的消息。这意味着处理程序完成的工作(至少)运行两次(通常是 5 次,因为我将 MaxRetries 配置为 5)。

我只希望在消息确实失败(即抛出异常)时重试消息,而不仅仅是因为它花费的时间超过一分钟。

这种行为是否符合设计?可以关掉吗? “60 秒”是否可配置?

在日志中,它看起来像是正在处理的新消息:

2014-12-09 14:50:38,406 [13] DEBUG NServiceBus.Pipeline.BehaviorChain`1 - ChildContainerBehavior
2014-12-09 14:50:38,422 [13] DEBUG NServiceBus.Pipeline.BehaviorChain`1 - MessageHandlingLoggingBehavior
2014-12-09 14:50:38,430 [13] DEBUG NServiceBus.Unicast.Behaviors.MessageHandlingLoggingBehavior - Received message with ID 031e6070-4397-4e55-8670-a3fc00f49d7c from sender Foo
2014-12-09 14:50:38,440 [13] DEBUG NServiceBus.Pipeline.BehaviorChain`1 - ImpersonateSenderBehavior
...
2014-12-09 14:50:40,313 [13] DEBUG NServiceBus.Pipeline.BehaviorChain`1 - InvokeHandlersBehavior
2014-12-09 14:50:40,319 [13] INFO MyHandler - Running
...
...
2014-12-09 14:51:38,642 [15] DEBUG NServiceBus.Pipeline.BehaviorChain`1 - ChildContainerBehavior
2014-12-09 14:51:38,667 [15] DEBUG NServiceBus.Pipeline.BehaviorChain`1 - MessageHandlingLoggingBehavior
2014-12-09 14:51:38,678 [15] DEBUG NServiceBus.Unicast.Behaviors.MessageHandlingLoggingBehavior - Received message with ID 031e6070-4397-4e55-8670-a3fc00f49d7c from sender Foo
2014-12-09 14:51:38,686 [15] DEBUG NServiceBus.Pipeline.BehaviorChain`1 - ImpersonateSenderBehavior
...
2014-12-09 14:51:38,831 [15] DEBUG NServiceBus.Pipeline.BehaviorChain`1 - InvokeHandlersBehavior
2014-12-09 14:51:38,837 [15] INFO MyHandler - Running

最佳答案

Mauro 是在正确的轨道上,但日志并没有很好地显示它。我们将 SQL 服务器用于消息队列。默认情况下,事务将在 60 秒后超时,但超时不会立即导致任何错误。只有当消息处理完成时,NServiceBus 才会尝试更新/移动完成的消息,但它不能,因为事务不再有效(然后抛出异常)。

第二个处理程序仅在 60 秒后启动的原因是因为启用了并发处理,并且一旦第一个处理程序的事务超时,该消息有效地可供另一个线程接收(直到此时它被锁定)。

所以解决方案是在配置中添加这样的东西:

  <system.transactions>
<defaultSettings timeout="00:10:00" />
</system.transactions>

(大概如果您使用 MSMQ 作为消息传输,可能会应用不同的超时......)

关于nservicebus - 如何阻止 NServiceBus 重试未引发异常的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354514/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com