2012-01-25 63 views
4

這是一個簡單的問題,但我無法找到答案。WCF + MSMQ 4:誰將消息從重試隊列移回應用程序隊列?

假設我的信息被放置在重試隊列(誰創造的重試隊列?它是一個WCF還是MSMQ服務?)

5分鐘後(這是我的重試延遲),該消息回來給應用程序隊列。

問題:在超時後誰將消息從重試隊列移動到應用程序隊列?

獎勵問題:如何跟蹤延遲?消息是否獲得「已移動」時間戳和「重試」時間戳?

回答

0

根據此文章Handling Poison Messages MSMQ 4提供了幾個新功能,允許應用程序使用子隊列處理有毒消息。這些功能包括:

  • 中止計數器
  • 移動計數器主隊列和子隊列之間移動消息,以及子隊列之間
  • 能力。

所以看起來實際的移動是由WCF處理,而不是MSMQ;而MSMQ現在只需支持有毒消息和重試處理。

1

WCF與標準MSMQ綁定(netMsmqBindingmsmqIntegrationBinding)不支持重試。因此在回答您的問題時:

誰創建重試隊列? - 你這樣做。

誰在超時後將消息從重試隊列移至應用程序隊列? - 你這樣做。

延遲是如何被跟蹤的? - 你必須這樣做。

NServiceBus是開源的,可以使用MSMQ進行傳輸。該產品提供了重試功能,但不使用WCF。

UPDATE

以上有效期爲3 MSMQ及以下。

+0

+1,但我的意思是問大約4.0(更新我的問題) –

2

帶MSMQ 4.0的WCF確實提供了automatic retry and poison message handling,雖然休的答案對舊版本的MSMQ是正確的。從評論

編輯: 在識別郵件移動到重試隊列過程和背部,我認爲它的MSMQ服務本身,因爲這是在MSMQ 4.0中的新功能。 WCF參與包含所有這些活動的事務,當然,由MSMQ處理消息放置在隊列中。

+0

感謝你的 - 我不知道這個新功能。 –

+0

我的客戶已經在高容量的電子商務環境中使用它一年多了,而且它的實力非常強大。保存他們的餅乾一兩次:) –

+0

我見過那篇文章,但我不清楚,雖然關於「消息被轉移到重試隊列」 - 誰這樣做?因爲重試參數是在WCF綁定中定義的,所以感覺像WCF(即Web服務)負責這一點,但同時重試是MSMQ 4的一個特性。這就是我迷惑的地方。 –