2016-03-30 52 views
0

我在Azure Workerrole上運行NServiceBus端點。我現在將所有診斷信息發送到表格存儲。我在DLQ中收到消息,我無法弄清楚爲什麼我沒有在我的表存儲中記錄任何異常。NServiceBus異常記錄爲INFO消息

事實證明,NSB將異常記錄爲INFO,這就是爲什麼我無法在所有實際的詳細記錄之間輕易發現它們的原因。

在我的情況下,命令處理程序的依賴關係無法解析,所以Autofac拋出異常。我完全明白爲什麼會拋出異常,我只是不明白他們爲什麼登錄爲INFO。該消息最終在我的DLQ中,我只有一條INFO-trace來理解爲什麼。

是否有理由在NSB中以這種方式處理異常?

+0

當你說「事實證明NSB將異常記錄爲INFO」時,你的意思是處理程序無法加載異常或從字面上看所有異常?如果處理程序被加載並拋出異常,它將被記錄爲錯誤。你能澄清一下嗎? –

+0

我的意思是,處理程序無法加載顯示爲日誌中的INFO: 2016-03-31 08:32:45.910信息NServiceBus.Unicast.Transport.TransportReceiver無法處理消息 Autofac.Core.DependencyResolutionException:無在類型'CommandHandler'中使用'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'找到的構造函數可以用可用的服務和參數調用 我希望這會記錄爲錯誤,而不是INFO。 – Laila

回答

1

NServiceBus不會將容器問題記錄爲錯誤,因爲它在嘗試處理消息的過程中發生。將嘗試第一級重試和第二級重試。當SLR執行時,它會記錄關於重試的警告。最終,一條消息將無法處理,並會記錄一條錯誤消息。 NSB and Autofac sample可以用來重現這一點。

當端點與一個向外擴展的角色運行,MadDeliveryCount是沒有大到足以容納所有角色實例,然後重試每個實例將舉行計數,這將導致DeliveryCount達到它的最大同時NServiceBus端點實例仍然認爲它有在將消息發送到錯誤隊列並記錄錯誤之前進行嘗試。類似question here我建議增加MaxDeliveryCount

有一個開放的NServiceBus issue有一個本機支持單反計數器。您可以將您的聲音添加到問題中。 NServiceBus(V6)的下一個版本將記錄消息ID以及異常,以便至少可以在DLQ中的消息和日誌文件之間進行關聯。