2016-03-30 29 views
0

我已經設置NServiceBus將失敗的消息轉發到由ServiceControl監視的錯誤隊列。NServiceBus MessageForwardingInCaseOfFaultConfig不能按預期工作

這裏是我的配置:

<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" /> 
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error" /> 

當我發送失敗要處理的消息,它發送到DLQ。但是,我無法在錯誤或error.log隊列中找到此消息的副本。當我查看AMS中的消息詳細信息時,傳遞計數器設置爲7,但是當我檢查NSB日誌時,我只能找到一次異常。另外,我對這個例外記錄爲「INFO」的原因感到有點困惑。這樣做很難檢測到,但這是一個單獨的問題。

注意:我正在運行Azure服務總線傳輸。

任何人都知道我在這裏失蹤的想法? 在此先感謝!

+0

你可以發佈相關的代碼位嗎? –

+0

對不起,我忘記將xml標記爲「代碼」,所以它被省略了...... – Laila

回答

3

當處理程序試圖處理消息並失敗時,消息將變爲可見並將再次重試。如果在隊列上設置的傳遞計數較低,則消息將無法處理,ASB將自行DLQ。這就是爲什麼消息在ASB DLQ中結束,而不是在NSB配置的錯誤隊列中。

您在DLQ-ed消息中看到的信息正在確認。 default MaxDeliveryCount in NSB.ASB v5被設置爲6,所以當消息試圖被處理的時候,ASB會DLQ你的消息。

這是由於NSB擁有它自己的(每個實例)重試計數器並且沒有使用ASB提供的本地DeliveryCount。如果您將端點擴展了,則需要調整MaxDeliveryCount,因爲每個角色實例都可以獲取消息並嘗試處理它。每個實例都有它的重試計數器。因此,實例計數器可能會低於6,但消息DeliveryCount將超過此值。

+0

現在,這是有道理的。謝謝你,肖恩,你總是很棒的幫助! – Laila