我遇到与重试相关的行为,但我在文档或搜索过程中找不到任何参考资料。本质上,如果我的处理程序处理消息的时间超过60秒(注意它不会引发异常),NServiceBus会触发另一个处理程序来处理相同的消息。这意味着处理程序完成的工作(至少)运行两次(通常是MaxRetries配置为5的5倍)。如何停止NServiceBus重试不引发异常的消息?
我只希望消息被重试,如果它真的失败(即引发异常),而不仅仅是因为它超过一分钟。
这是行为吗?它可以关闭吗? “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
看看端点日志,有一个正在发生的事情是,交易超时的可能性(默认的超时时间为1分钟)没有一异常基本上被抛出并重试消息。 – 2014-12-09 11:33:44
我在日志中看到的所有行为都是流水线行为链,就像收到一条新消息一样。事务超时无关。 – zeroid 2014-12-09 17:14:39