2011-10-04 56 views
8

只想獲得有關如何將消息發送到遠程事務消息隊列的確認。MSMQ交易消息傳遞如何工作?

假設我有一個兩臺機器,A和B.

機A有一個用於接收消息的事務隊列。一個Windows服務監視這個隊列並對數據執行一些操作(將它保存到SQL Server中)。 機B正在運行需要寫入隊列在計算機A

的幾個問題的應用程序:

  1. 發送該消息時,是機器B上創建一個本地副本,它得到前交付給機器A?
    a。如果是這樣,默認情況下是這種行爲,還是僅在發送「IsRecoverable」屬性時纔會發生? b。隊列是否事務是否對此行爲有影響?

  2. 由於我使用的是事務性隊列,事務提交後數據在哪裏? a。它是否在本地,等待msmq服務將消息傳遞到遠程隊列? b。或者消息是否位於遠程計算機上的隊列中?

我無法解釋文檔。在某些地方,我看到商店和轉發行爲被描述,但我無法理解這是否是事務性隊列的默認行爲,或者我需要明確地做些事情才能實現。

回答

6

關於事務性MSMQ的主要理解是,實際上有3個不同的事務涉及消息事務傳輸到遠程隊列。

  1. 發送方將消息寫入本地臨時隊列。
  2. 發件人計算機上的隊列管理器通過線路將消息傳輸到收件人計算機上的隊列管理器。
  3. 接收方服務處理隊列消息,然後從隊列中刪除消息。

那麼,現在回答你的問題:

發送該消息時,是機器B上創建一個本地副本, 以前被傳遞到機器A?

如果是這樣,這種行爲在默認情況下,或當發送 「IsRecoverable」屬性它纔會發生?

默認情況下。這就是所謂的store and forward

排隊是事務性的事實是否對此行爲有影響?

除了發生故障時沒有。

因爲我使用的是事務性隊列,所以事務提交後數據一旦被提交,數據在哪裏?

這取決於你的意思是該交易(見上文)

難道是坐在當地,等待MSMQ服務交付 消息發送到遠程隊列?

只有當遠程隊列不可用時。

或者消息是否位於遠程計算機上的隊列中?

如果接收方服務無法成功處理消息(處理程序中存在異常),則消息將保留在遠程隊列中。

+0

謝謝休,這非常有幫助! – Kartik