2011-01-19 15 views
4

NserviceBusを使用して、sagaでタイムアウト管理をテストするためのサンプルアプリケーションを開発していました。NServiceBus TimeOut Manager

サガは、タイムアウトは更新がnessageに来たならば私のコードは

以下のようなものです 5分にタイムアウトを更新起こる前に、それは1分 にタイムアウトだし始めたとき、私は、次の

を達成するためにトラインよ

public class OrderSaga : Saga<OrderSagaData>, 
     IAmStartedByMessages<SampleMessage>, 
     IHandleMessages<UpdateMessage> 
    { 
     public override void ConfigureHowToFindSaga() 
     { 
      ConfigureMapping<UpdateMessage>(s => s.PurchaseOrderNumber, m => m.Update); 
     } 

     public void Handle(SampleMessage message) 
     { 
      this.Data.PurchaseOrderNumber = message.Name; 
      RequestTimeout(DateTime.Now.AddMinutes(1), message.Name); 
     } 


     private void Complete() 
     { 
      MarkAsComplete(); 
     } 

     public override void Timeout(object state) 
     { 
      Complete(); 
     } 


     #region IMessageHandler<UpdateMessage> Members 

     public void Handle(UpdateMessage message) 
     { 
      this.Data.PurchaseOrderNumber = message.NewValue;  
      RequestTimeout(DateTime.Now.AddMinutes(5), message.Update); 
     } 

     #endregion 
    } 
} 

しかし、ここでの問題は、タイムアウトが5分に更新されていないことです。タイムアウトは1分間有効です。

ここで間違っていることを教えてください。事前に

おかげで、 Ajai

答えて

4

佐賀タイムアウトを更新することはできません。あなたが何をしても、彼らは火を放つでしょう。あなたのケースでは、両方のタイムアウトを受け取り、あなたのタイムアウトハンドラでコンプリートを呼び出すと、1分後にサガが終了します。これを考慮に入れるロジックを追加する必要があります。このような

何か、それを行う可能性があります:

 
if(!updateReceived or state == ThisTimeoutWasRequestedByMyUpdateHandler) 
    Complete(); 

は、この情報がお役に立てば幸い!

+0

こんにちはアンドレアス、速い返信ありがとうございました。私はMarkCompleteにbeacauseを与えました。私は5分後にサガが完了することを期待しています。私ができることから2回以上値を更新すれば、更新レベルがnレベルになるようにしてください。それでは、サガ・データベースの更新回数をこのようにしておくのが良いでしょうか? – Ajai

+0

あなたのサガはいつ終わるはずですか? 5分後?あなたはアップデートを受け取った後に? n更新後? –

+0

私の答えが更新されました。 –