我偶尔会在尝试处理命令时收到Cirqus中的异常。它发生在不同类型的命令中,但它总是发生在这种特定的聚合根类型上(让我们说它是一个注册表单)。我们没有删除任何事件,也没有以任何方式搞乱事件表,所以我想知道还有什么可能导致这个问题。
确切(但匿名)的错误消息是:Tried to apply event with sequence number 12 to aggregate root of type RegistrationForm with ID d863ac79-6bc0-480d-9d83-30b7696e7ea1 with current sequence number -1. Expected an event with sequence number 0.
因此,例如,为了调试最新的异常实例,我查询了数据库以获取此聚合ID,并获得了37个事件作为回报。然后我检查了序列,序列似乎正确。我还检查了全局序列至少也是按时间顺序排列的。然后我查看了" meta" column具有与记录不同的全局序列,但也检查了OK。
我觉得最令人困惑的是其他注册表格能够通过。看看我们的日志,没有我可以识别的模式,而且它只发生在3-5%的时间。
我想我想知道的是:什么会导致这个问题?我该怎么调试呢?我怎样才能防止它在将来发生?
系统细节:我们在.net 4.5下运行,使用Cirqus 0.63.12(然后在0.66.4上测试),使用Postgres 9.4作为数据库(并使用Cirqus.Postgres的v0.63.12)封装)。
答案 0 :(得分:1)
我发现了这个问题!似乎PostgreSQL事件源的SQL代码缺少Order By
子句,在某些情况下,我的事件是无序返回的。我提交了此拉取请求作为问题的建议修复:https://github.com/d60/Cirqus/pull/75