0

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

我注意到的是,如果在我的事件处理程序中引发异常(并且因为我没有使用 DTC),则事件将在事件存储中提交,并且调度标志设置为 false。这是我所期望的,但是当我重新启动服务器时,该标志设置为 true,但从未调用事件处理程序代码。

任何想法为什么会发生这种情况?

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

4

1 回答 1

2

如果我没记错的话,一旦事件被存储,调度标志设置为 false 应该发生。通常,在启动应用程序时,您会像这样初始化事件存储:

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

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

您不与聚合中的事件处理程序混淆吗?

public void Apply(MystuffDone evt)
{
   //code...
}
于 2012-10-15T07:30:10.380 回答