我們正在使用CQRS + ES。 ES是NEventStore(大概是JOliver EventStore)。我們有2個不同的命令集合。第二AR的投影取決於讀取模型中由第一AR投影寫入的數據。問題是,當我們運行軟件的時候,一切都變得非常快,以至於有時候這兩個聚合會被保存在具有相同日期時間的事件存儲(列CommitStamp)中。當重播事件時,我們從CommitStamp列開始按順序獲取它們。但是,如果這兩個流具有相同的CommitStamp並且採用錯誤的順序,則讀取的模型預測會有例外。NEventStore問題與重播事件
任何想法如何解決這個問題?
===============================
這裏是關於這個問題,在github上 https://github.com/NEventStore/NEventStore/issues/170討論
===============================
編輯:這就是我們目前正在重播事件。我搜索了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());
}
這是[已知問題(#159)](https://github.com/NEventStore/NEventStore/issues/159);至少對於一些持久性後端來說。你使用哪個持久性引擎? – Marijn
我們正在使用MSSQL 2008 – mynkow
@Marijn:這正是我們的問題。 – mynkow