NEventStore重播事件的问题

myn*_*kow 6 cqrs neventstore

我们正在使用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)

myn*_*kow 1

Damian 在数据库中添加了一个检查点列。这是在当前的主分支中。当事件重播时,GetFromCheckpoint(int)结果是正确的。