2014-05-21 82 views
0

我正在使用MSMQ 4和WCF。我們有一個Microsoft Dynamics插件將消息放入隊列中。服務接收消息並向另一個Web服務器發出HTTP請求。 Web服務器通過在另一個隊列上放置另一條消息做出響應。第二個服務提取消息並將響應發回給Dynamics ...MSMQ + WCF - 延長重試時間

我們將重試隊列設置爲重試3次,然後等待5分鐘再重試。 Dynamics系統有時需要很長時間(由於其他插件),我們可以在數據庫事務提交之前進行往返。用戶沒有看到更新通過另外5分鐘。

我很好奇,如果有一種方法來配置重試機制增量重試。所以,第一次失敗時,它只會等待幾秒鐘。如果第二次失敗,它會等待兩次。重試之間的時間只是不斷增長。

減少重試之間的時間的問題是,錯誤消息可能很容易填滿日誌文件。

回答

0

事實證明,沒有內置的方法來做到這一點。一個稍微涉及的選項是創建多個隊列,每個隊列都有自己的重試/毒性子隊列,每個隊列的重試延遲都在增加。您可以爲每個隊列重複使用相同的處理程序 - 唯一改變的是配置。您還需要一個可以讀取毒性子隊列(service)並將消息移動到鏈中的下一個隊列(client)的處理程序。

因此,您將receiveErrorHandling設置爲MovemaxRetryCyclesreceiveRetryCount只是1。每個隊列將使用增長的retryCycleDelay。您創建的每個隊列都會自動爲其創建一個poison子隊列。您只需從每個poison子隊列讀取數據,然後使用客戶端將其移動到下一個隊列。

我確定有人可以編寫一些代碼,它會自動創建N個隊列,並且日益增長的retryCycleDelay並以編程方式將它們連接起來。由於每個隊列都是相同的處理程序/客戶端,所以不會有什麼大不了的。