私は2種類のイベントを持っています:
- 人が変わった
- 人の住所が変更されました。
どちらも、新しい人物 (および新しいアドレス) が作成される (作成または更新のようなもの) ときにも公開されます。
新しい人物が作成されると、PersonChanged と PersonAddressChanged の 2 つのイベントが発行されます (この順序で)。ただし、NServiceBus
は非同期であるため、任意の順序で処理できます。また、アドレスが (既存の人の場合) 変更されると、PersonChanged イベントは発生せず、PersonAddressChanged イベントのみが発生します。
私は PersonAddressChanged イベントのハンドラーを書きたいと思います:
- その人物がデータベースに存在するかどうかを確認する
- はいの場合は、更新するだけです
- いいえの場合は、サガを開始し、PersonChanged イベントを待ちます (新しい人物であると仮定します)。
そして、PersonChanged イベントで、人物をデータベースに挿入し、サガを見つけて、PersonAddressChanged のハンドラーをもう一度実行する必要があります。
NServiceBus Sagas でこれを達成できますか? PersonChanged → PersonAddressChanged
特定のアドレス変更に対して PersonChanged イベントが発生しない場合があるため、メッセージ処理が正常に行われているとは言えません。