2012-03-27 63 views
0

我們正試圖在相同版本的NSB上執行服務器移動,但移動到另一個盒子。Nservicebus移動超時消息跨越不同的盒子

需要移動一些超時消息。超時消息具有響應地址(它必須回到的端點),移動這些地址的最佳方式是什麼。我看到的幾個選項

1)使用Queue Explorer導入它們並手動編輯響應。如果我們有超過100條超時消息,它會變得難以管理。我已經驗證了這個作品。

2)我試着用一些代碼從Andreas最新的超時消息從(2.6到3.0)移動,看起來像下面的deseralizer已經改變。當我嘗試閱讀身體時,我得到:「根元素缺失」。我試着將它反序列化爲TimeoutData和Timeoutmessage。

3)我設置了一個端點來偵聽TimeoutMessage,並使用mutator將標題更改爲目標端點,但這似乎正在工作,但是timeoutmessages在處理後不會從隊列中取出。

所以,我堅持1,我想要一些自動化的過程。思考?

回答

0

安德烈亞斯, 感謝您的答覆。我回去工作了我的第三個解決方案。我監聽timeoutmessage,使用DestinationOverride來改變到新地址並執行一個總線。發送到超時端點。

我不得不添加DonotCOntinueDispatchingCUrrentMessageToHandlers從隊列中刪除超時消息。

這是我的代碼看起來像

public void Handle(TimeoutMessage message) 
    { 

     DestinationOverride.CurrentDestination = ConfigurationManager.AppSettings["ResponseQueue"]; 

     var header = message.GetHeader("CorrId"); 

     bus.Send<TimeoutMessage>(ConfigurationManager.AppSettings["OutputQueue"], tm => 
      { 
       tm.ClearTimeout = false; //always false since we don't store the "clear" requests 
       tm.Expires = message.Expires; 
       tm.SagaId = message.SagaId; 
       tm.State = message.State; 
       tm.SetHeader("CorrId",header); 
      }); 

     bus.DoNotContinueDispatchingCurrentMessageToHandlers(); 

    } 

感謝。