4

メッセージ「Event1」によって開始されるが、同じアプリケーション ID を持つ「重複した」開始メッセージの受信を無視するサガを作成したい (2 人以上のユーザーが短時間内に UI ボタン​​を押した場合に発生する可能性がある) . ドキュメントは、このアプローチが機能することを示唆しているようです:

  • 佐賀が宣言IAmStartedByMessages<Event1>
  • 佐賀はそれ自体を構成しますConfigureMapping<Event1>(s => s.SomeID, m => m.SomeID);
  • Handle(Event1 evt) は、最初のメッセージを処理するときにブール値のフラグを設定し、フラグが既に設定されている場合はハンドラーから除外されます。

これは機能しますか?サブスクライバーがマルチスレッドの場合、競合状態は発生しますか? もしそうなら、どうすれば望ましい動作を達成できますか?

ありがとう!

4

1 に答える 1

5

2 つの Event1 メッセージが同時に処理されると、競合状態が発生します。2 つの saga インスタンスが作成されないようにする方法は、SomeID 列に一意の制約を設定することです。

于 2011-06-22T09:49:53.693 に答える