サブスクリプションエンドポイントで失敗して再試行することは可能でしょうか?再試行回数/遅延を微調整して、メッセージが再試行される前にセカンダリデータベースが更新されるようにすることができます。
データベースからデータを検索するには最良の方法と、イベントのバージョンを区別する方法を見つける必要があります。更新の場合は、バージョン番号または最終更新日を使用するか、作成時に識別子を参照するだけです。セカンダリデータベースオフ
エンドポイントの読み取りデータは、このようなイベントハンドラている可能性があります:
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)
};
}
}
また、だけではなく、イベントを公開するには、ある程度の時間が経過した後に、実際のイベントを公開するために、同じエンドポイントに遅延メッセージを送ることができます。