2015-03-03 90 views
1

我希望創建使用MSMQ以下拓撲:持續性在MSMQ

  • 在服務器A服務將消息寫入本地隊列
  • 在服務器A的本地隊列是一個介體到另一個隊列在服務器B

這意味着當服務器A中的服務將消息寫入服務器A中的隊列時,此隊列會立即將此消息傳輸到服務器B中的隊列中。如果由於某種原因,服務器B的連接將關閉服務器A中的隊列聚合消息,直到連接恢復編輯。

MSMQ是否支持此拓撲

回答

1

是MSMQ支持此方案。您可以使用Transactional MSMQ來完成此操作。

事務MSMQ的基本概念:

1)交易的開始和結束,必須指出的,使得它是已知的操作包含該事務處理內。

2)如果事務成功完成,它將被提交,這將導致所有操作成爲永久性並且事務結束。 3)如果事務失敗,無論出於何種原因,它將被中止併發生回滾,撤銷在中止之前已經執行的任何操作。


事務MSMQ:

源計算機跟蹤傳出消息,直到它得到來自目的地的順序ACK。順序ACK表示消息已成功插入最終目標計算機上的最終目標隊列中。如果消息被成功傳送到下一跳但未收到ACK命令,則源計算機在30秒後重新發送。重新發送間隔然後增加(長達六小時)。如果其他交付路線可用,消息隊列將使用它們進行重發。

當您將消息發送到遠程隊列時,會在您自己的計算機上創建一個臨時傳出隊列。這用於遠程隊列不可用的情況。如果您轉到計算機管理控制檯(compmgmt.msc),並展開服務和應用程序/消息隊列/傳出隊列,您將看到這些隊列。控制檯的右側應顯示詳細信息,包括下一跳的狀態(連接與否)和IP地址(es)。

消息隊列提供其自己的事務確認過程,以通知發送應用程序,消息是從隊列中檢索的,或者爲什麼接收應用程序未能檢索到它們。請注意,此確認過程完全獨立於提交交易。

當消息放入目標隊列時,目標隊列管理器通過發送包含其序列號的訂單確認消息回到源計算機來確認其到達。該數字向源隊列管理器指示消息流中直到已確認消息的所有消息都被接受。

這裏有一些鏈接,你可以看一下:

1)Transactional and Nontransactional Messaging

2)Message Queuing Transactions

3)Transaction Confirmation Process

4)Reliable Messaging with MSMQ and .NET

5)FAQs on MSMQ