2011-06-21 5 views
3

"Event1"というメッセージで開始されるサガを作成したいのですが、同じアプリケーションIDの "重複"開始メッセージの受信は無視されます(これは2人以上のユーザーが時間)。ドキュメントには、このアプローチがうまくいくことを示唆しているようだ:NServiceBus Sagaが複数回起動されないようにするにはどうすればよいですか?

  • 佐賀は、それが最初のメッセージを処理するときにブールフラグを設定し、脱落IAmStartedByMessages<Event1>
  • 佐賀はConfigureMapping<Event1>(s => s.SomeID, m => m.SomeID);
  • ハンドル(イベント1 EVT)で自身を設定宣言するフラグがすでに設定されている場合はハンドラの

これは機能しますか?サブスクライバがマルチスレッド化されている場合は競合状態になりますか?もしそうなら、私はどのようにして目的の動作を達成できますか?

ありがとうございます!

答えて

4

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

+0

よろしくお願いいたします。そして、固有の制約に起因する失敗が再試行されると仮定した場合、予期した結果で私のガードロジックを打つでしょうか? – jlew

+0

それは絶対に正しいです。 –

関連する問題