Eventstore dispatch标志在重新启动时设置为true

时间:2012-10-13 10:30:00

标签: cqrs event-store

我正在使用JOliver的EventStore,现在我正在使用同步调度程序,以便在命令进入时,它由我的命令处理程序处理,然后保存在事件存储中,然后我的事件处理程序更新我的读取模型。在这个阶段,我没有使用NServiceBus,但我希望稍后介绍它。我的eventstore数据库和readmodel在同一台机器上。

我注意到如果在我的事件处理程序中引发异常(并且因为我没有使用DTC),事件将在eventstore中提交,并且dispatch标志设置为false。这是我的预期,但是当我重新启动服务器时,标志设置为true,但永远不会调用事件处理程序代码。

为什么会发生这种情况?

我假设任何未调度的事件都会被调度,或者事件存储代码中会有一些重试机制。

1 个答案:

答案 0 :(得分:2)

如果我没有错,那么一旦存储事件,就会发生设置为false的dispatch标志。通常,在启动应用程序时,您会像这样初始化事件存储:

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

在此操作发生 dispatcher.dispatchCommit 之前,该标志设置为false,并且一旦此操作成功,该标志将设置为true。

您是否对聚合中的事件处理程序感到困惑?

public void Apply(MystuffDone evt)
{
   //code...
}