我们正在使用CQRS + ES.ES是NEventStore(通常是JOliver EventStore).我们在不同的命令中有2个聚合.第二AR的投影取决于读模型中第一AR投影所写的数据.问题是,当我们运行软件时,一切都变得如此之快,以至于有时两个聚合在事件存储中保持相同的日期时间(列CommitStamp).重播事件时,我们从CommitStamp列开始按顺序获取事件.但是如果两个流具有相同的CommitStamp并且采用错误的顺序,则读取模型预测会出现异常.
知道如何解决这个问题吗?
===============================
以下是关于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());
}
Run Code Online (Sandbox Code Playgroud)