2012-03-27 11 views
0

NSBの同じバージョンでサーバー移動を行いますが、別のボックスに移動しようとしています。Nservicebusは異なるボックス間でタイムアウトメッセージを移動します

一部のタイムアウトメッセージを移動する必要があります。タイムアウトメッセージには、応答アドレス(エンドポイントを返さなければならない)がありますが、これを移動する最善の方法は何ですか。私が見たオプションのカップル

1)キューエクスプローラを使用してそれらをインポートし、応答を手動で編集します。 100を超えるタイムアウトメッセージがあれば、それは管理不能になります。私はこの作品を確認しました。

2)Andreasの最新のタイムアウトメッセージからのコードを使用してみました(2.6から3.0)、根底にある脱水剤が変更されたように見えます。私は次のようになります: "ルート要素がありません"、身体を読み取ろうとしているとき。私はTimeoutDataとTimeoutmessageの両方にデシリアライズを試みました。

3)私は、TimeoutMessageをリッスンするためのエンドポイントをセットアップし、mutatorを使用してヘッダーを宛先エンドポイントに変更しましたが、これは機能しているようですが、処理後にタイムアウトメッセージはキューから取り出されません。

それで、私は1で立ち往生しており、私はその周りに自動化されたプロセスがほしいと思います。思考?

答えて

0

アンドレアス、 応答をありがとう。私は戻って、私の第3の解決策に取り組んだ。私は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(); 

    } 

おかげのように見えるものです。

0

あなたの最善の策は、既存のTimeoutMigrator

https://github.com/NServiceBus/NServiceBus/tree/master/src/tools/migration/TimeoutMigrator

を変更し、反射板やストレージキュー内の内容を見て、あなたの現在のTimeoutDataを見てみることはおそらくです。

その後、あなたの現在のスキーマと一致する移行ツールでTimeoutDataクラスを変更します。

https://github.com/NServiceBus/NServiceBus/blob/master/src/tools/migration/TimeoutMigrator/TimeoutData.cs

関連する問題