2012-12-05 69 views
9

我正在使用MSMQ版本4並具有事務性隊列。我正在使用WCF偵聽傳入消息的隊列。我如何明確標記消息在WCF中的事務性MSMQ中毒

處理過程中,對第三方組件的依賴性可能會在更長的時間內失敗或不可用。爲了彌補這一點,我使用MSMQ 4(http://msdn.microsoft.com/en-us/library/aa395218.aspx)中的有害消息處理功能重試消息x使用量爲y等待時間量。

但是在某些情況下,我知道輸入消息無效/中毒。當發生這種情況時,拋出異常會使消息跟隨有毒消息處理例程,像所有其他消息一樣,具有所有重試和等待時間。但是當我知道信息中毒時,我沒有看到重試的理由,並等待配置的時間讓它由毒性隊列處理。

是否有任何方法顯式標記消息爲中毒,因此它不會遵循配置的重試流並立即移動到毒性隊列?

+0

我有完全一樣的問題,我認爲你找不到解決方案? – Leon

+0

@Leon事實上,尚未找到解決方案。 – Leo

+0

我是MSMQ新手,我還沒有嘗試過 - 抱歉,如果它很愚蠢。這是在你鏈接到的文章中, 「毒性隊列是主隊列的一個子隊列,被命名爲」毒藥「並且由MSMQ自動生成。要訪問它,提供主隊列名稱,後跟一個」 ;「和子隊列名稱,在這種情況下 - 」毒藥「 難道你不能檢測到有毒消息,將它們從主隊列中刪除並手動將它們發送到內置的毒隊列中? –

回答

0

那麼我會建議在這種情況下存儲請求數據在數據庫中,不要拋出任何異常,因此WCF消息處理成功,將從隊列中刪除。

如果需要,我們可以稍後處理這些數據,它很容易從數據庫處理數據而不是監視/管理毒素隊列。

根據您可以決定的消息的下一個處理時間戳,並且線程可以從數據庫重新處理這些消息,您可以進行一些配置。