0

私は JOliver の EventStore を使用していますが、今のところ同期ディスパッチャーを使用しているため、コマンドが着信すると、コマンド ハンドラーによって処理され、イベント ストアに保存され、イベント ハンドラーが読み取りモデルを更新します。この段階では NServiceBus を使用していませんが、後で導入したいと考えています。私の eventstore データベースと readmodel は同じマシン上にあります。

私が気付いたのは、イベント ハンドラーで例外が発生した場合 (また、DTC を使用していないため)、イベントがイベントストアでコミットされ、ディスパッチ フラグが false に設定されることです。これは私が予想したことですが、サーバーを再起動すると、フラグは true に設定されますが、イベント ハンドラー コードは呼び出されません。

なぜこれが起こっているのですか?

ディスパッチされていないイベントはディスパッチされるか、イベント ストア コードに何らかの再試行メカニズムがあると想定しました。

4

1 に答える 1

2

私があまり間違えていなければ、イベントが保存されると、falseに設定されたディスパッチフラグが発生するはずです。通常、アプリケーションを起動するときに、次のようにイベントストアの初期化を行います。

var storeEvents = Wireup.Init()
                  ...
                  .DispatchTo(new DelegateMessageDispatcher(dispatcher.dispatchCommit)
                  .Build();

フラグは、このアクションが発生する前はfalseに設定され、 dispatcher.dispatchCommitに設定され、このアクションが成功するとtrueに設定されます。

アグリゲート内のイベントハンドラーと混同していませんか?

public void Apply(MystuffDone evt)
{
   //code...
}
于 2012-10-15T07:30:10.380 に答える