我正在使用JOliver的EventStore,现在我正在使用同步调度程序,以便在命令进入时,它由我的命令处理程序处理,然后保存在事件存储中,然后我的事件处理程序更新我的读取模型。在这个阶段,我没有使用NServiceBus,但我希望稍后介绍它。我的eventstore数据库和readmodel在同一台机器上。
我注意到如果在我的事件处理程序中引发异常(并且因为我没有使用DTC),事件将在eventstore中提交,并且dispatch标志设置为false。这是我的预期,但是当我重新启动服务器时,标志设置为true,但永远不会调用事件处理程序代码。
为什么会发生这种情况?
我假设任何未调度的事件都会被调度,或者事件存储代码中会有一些重试机制。
答案 0 :(得分:2)
如果我没有错,那么一旦存储事件,就会发生设置为false的dispatch标志。通常,在启动应用程序时,您会像这样初始化事件存储:
var storeEvents = Wireup.Init()
...
.DispatchTo(new DelegateMessageDispatcher(dispatcher.dispatchCommit)
.Build();
在此操作发生 dispatcher.dispatchCommit 之前,该标志设置为false,并且一旦此操作成功,该标志将设置为true。
您是否对聚合中的事件处理程序感到困惑?
public void Apply(MystuffDone evt)
{
//code...
}