正如休指出的那樣,您只需要一個MSMQ隊列就可以在一個方向上從源發送消息到目的地。源和目標可以位於同一臺服務器上,同一網絡上或互聯網上,但源和目標都必須運行MSMQ服務。
如果您需要執行'消息'路由(例如,處理來自多個源或目標隊列的消息的交換機,或根據消息的類型將消息路由到一個或多個訂戶等),您需要的不僅僅是MSMQ隊列。 雖然您當然可以使用BizTalk來執行郵件路由,但如果您不需要使用BizTalk的其他功能,則這將會很昂貴/過量。會推薦你看看開源,或者自己構建一些自定義的東西。
但是通過「路由」,你可能指的是使用HTTP作爲傳輸時的隊列重定向功能。通過互聯網(例如here和here)。
回覆:無法傳送重試
我認爲你有大部分的概念 - 通常是消息傳遞重試功能應該是隱含在MSMQ。如果MSMQ在定義的到期之前無法傳送消息,則它將在死信隊列中返回,然後源可以處理來自DLQ的消息,然後對它們進行「補償」(例如,反轉「發送」的動作,向用戶指示失敗等)。
然而,在目的地「處理」類型重試將需要由目標應用程序/聽衆來執行(例如,如果目標系統是向下,死鎖等)
普通的方法可以做到這包括:
- 使用2階段提交 - 分佈式工作單位下,拉消息關閉MSMQ並對其進行處理(例如,將數據插入數據庫,改變一些記錄等情況),並且如果遇到任何故障,然後將消息留在隊列中,並且數據庫更改將回滾。
- 應用程序級別重試 - 即在目標系統上發生「可重試」類型錯誤(由於負載,死鎖等導致的超時),然後休眠幾秒鐘,然後重試同一事務。
然而,在大多數情況下,無限期處理重試都是不可取的,你最終將需要承認失敗,並實現一種機制來記錄信息,且錯誤,並從隊列中刪除。
但是我不會'重試'業務失敗(例如業務規則,驗證等),並且應該在您的要求中定義行爲如何處理這些問題(例如,帳戶透支,消息格式不正確或無效等),例如通過將「NACK」類型的消息返回給源。
HTH
原來我困惑的約80%是因爲主要的地方去,如果你想了解MSMQ是*不* MSDN,這就是我一直在尋找,而是在TechNet上:HTTP: //vmware.microsoft.com/en-us/library/cc753070(v=WS.10).aspx – khanfx 2012-02-14 20:51:46