我遇到與重試相關的行爲,但我在文檔或搜索過程中找不到任何參考資料。本質上,如果我的處理程序處理消息的時間超過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