2016-10-27 6 views
2

私は、nservicebusホスト4.7.5を持つAzureワーカーの役割を持っています。このホストは、空白のサービスバス運行とトピックにイベントを送信します。イベントの送信を遅らせたり、トピックサブスクリプションの遅延後にメッセージが表示されるようにいくつかのプロパティを設定する方法はありますか?プライマリ・データベースの変更が通知された後、ホストはイベントを送信します。プライマリデータ書き込みが複製されるいくつかのセカンダリデータベースがあります。受信者は、nservicebusホストを使用し、トピックにサブスクリプションを持つ青い労働者ロールです。Nservicebusはイベントの発行を延期しました

受信者がメッセージを受信するまでに、複製遅延のためにセカンダリの同期データが失われる可能性があります。

1つのオプションは、プライマリデータベースを使用して読み取ることですが、それは私が取りたくないルートです。

答えて

3

サブスクリプションエンドポイントで失敗して再試行することは可能でしょうか?再試行回数/遅延を微調整して、メッセージが再試行される前にセカンダリデータベースが更新されるようにすることができます。

データベースからデータを検索するには最良の方法と、イベントのバージョンを区別する方法を見つける必要があります。更新の場合は、バージョン番号または最終更新日を使用するか、作成時に識別子を参照するだけです。セカンダリデータベースオフ

エンドポイントの読み取りデータは、このようなイベントハンドラている可能性があります:

public class CustomerCreationHandler : IHandlesMessage<CustomerCreated> 
{ 
    public void Handle(CustomerCreated @event) 
    { 
     var customer = Database.Load(@event.CustomerId); 
     if(customer == null) 
     { 
      throw new CustomerNotFoundException("Customer was not found."); 
     } 

     //Your business logic goes here 
    } 
} 

をあなたは、イベントハンドラを再試行すると各試行の間でどの程度の遅延があるだろう回数を制御することができます。この場合、メッセージは第1レベルの再試行で再試行され、次に設定された第2レベルの再試行に引き渡されます。

class ProvideConfiguration : 
    IProvideConfiguration<SecondLevelRetriesConfig> 
{ 
    public SecondLevelRetriesConfig GetConfiguration() 
    { 
     return new SecondLevelRetriesConfig 
     { 
      Enabled = true, 
      NumberOfRetries = 2, 
      TimeIncrease = TimeSpan.FromSeconds(10) 
     }; 
    } 
} 

また、だけではなく、イベントを公開するには、ある程度の時間が経過した後に、実際のイベントを公開するために、同じエンドポイントに遅延メッセージを送ることができます。

関連する問題