CQRS + ES を使用しています。ES は NEventStore (以前の JOliver EventStore) です。異なるコマンドに 2 つの集計があります。2 番目の AR の射影は、読み取りモデルの最初の AR 射影によって書き込まれたデータに依存します。問題は、ソフトウェアを実行するとすべてが高速になり、2 つの集計が同じ日時 (列 CommitStamp) でイベント ストアに保持されることがあるということです。イベントを再生すると、CommitStamp 列の順序で最初から取得されます。ただし、2 つのストリームが同一の CommitStamp であり、間違った順序で取得された場合、読み取りモデルの予測は例外で失敗します。
この問題を解決する方法はありますか?
===============================
github https://github.com/NEventStore/NEventStore/issues/170でのこの問題に関する議論は次のとおりです 。
===============================
EDIT : これは現在、イベントを再生する方法です。GetFrom(...) の仕組みを調べたところ、 commitstamp 列が順序付けに使用されていないことがわかりました。やはりコミット順はありません。そのため、イベントの再生を開始すると、今日のイベント、次は 2 年前に記録されたイベント、次などのイベントが返される場合があります。
public void ReplayEvents(Action<List<UncommittedEvent>> whatToDoWithEvents, DateTime loadEventsAfterDate)
{
var eventPortion = store.Advanced.GetFrom(loadEventsAfterDate);
var uncommitedEventStream = new UncommittedEventStream();
foreach (var commit in eventPortion)
{
foreach (var eventMessage in commit.Events.ToList()))
{
uncommitedEventStream.Append(new UncommittedEvent(eventMessage.Body));
}
}
whatToDoWithEvents(uncommitedEventStream.ToList());
}