2010-03-15 51 views
3

我們計劃在我們的應用程序中使用NServiceBus來調度消息。 在我們的例子中,每條消息都有timeToLive屬性,定義了處理這個消息的時間段。NServiceBus異常處理和消息重試機制

對於在第一次嘗試中消息處理不成功的情況,我們的計劃是在成功處理或者timeToLive已過期時將其移至特定的重試存儲(重試隊列)和重試消息(在重試之間有一些超時) 。

如果timeToLive過期,我們計劃記錄消息內容和丟棄消息。

實際上,這種重試行爲主要取決於我們正在實施的協議。

有什麼辦法可以用NServiceBus來實現這樣的行爲嗎?我明白了,那些不成功的消息去了特定的error queue。是否可以創建一個單獨的總線,指向錯誤隊列?

回答

4

我建議你有一個單獨的進程,根據你描述的邏輯來監視錯誤隊列的重試次數。看看隨nservicebus爲靈感的ReturnToSourceQueue工具:

http://nservicebus.svn.sourceforge.net/viewvc/nservicebus/trunk/src/tools/management/Errors/ReturnToSourceQueue/NServiceBus.Tools.Management.Errors.ReturnToSourceQueue/Class1.cs?view=markup

我對如何處理可能給你一些想法,以及失敗的博客文章: http://andreasohlund.net/2010/03/15/errorhandling-in-a-message-oriented-world/

希望這幫助!

+0

謝謝你,安德烈亞斯。在提出這個問題之前,我已經寫過你的文章了)。 你能告訴我是否有可能在一個進程中託管多條消息總線?可以,或者nservicebus不支持?或者許多巴士在一個過程中工作會受到嚴厲的性能處罰? – 2010-03-16 09:20:59

+0

在默認配置模式下,每個應用程序域只能有一條總線。問題在於,您可能希望將錯誤隊列放在單獨的計算機上,並讓所有其他進程在其中移動錯誤。然後,您將擁有一個單獨的進程/總線,從那個錯誤隊列中取出您自己的定製邏輯。 – 2010-03-16 10:01:23

+0

andeas你可能想要修復你的鏈接 – Simon 2014-02-04 02:40:50