Cirqus:"Expected an event with sequence number 0." 异常
Cirqus: "Expected an event with sequence number 0." exception
我偶尔会在 Cirqus 中尝试处理命令时收到异常。它发生在不同类型的命令中,但是它总是发生在这种特定的聚合根类型上(假设它是一个注册表单)。我们没有删除事件,也没有以任何方式弄乱事件 table,所以我想知道还有什么可能导致这个问题。
确切的(但匿名的)错误消息是: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,并在 return 中获得了 37 个事件。然后我检查了序列,序列似乎是正确的。我还检查了全局序列至少在时间顺序上也是正确的。然后我检查 "meta" 列是否具有与记录不同的全局序列,但也检查正常。
我觉得最困惑的是其他注册表单都可以通过。查看我们的日志,没有我可以识别的模式,而且它只发生大约 3-5% 的时间。
我想我想知道的是:什么会导致这个问题?我该如何调试它?我怎样才能防止它在未来发生?
系统细节:我们 运行 在 .net 4.5 下,使用 Cirqus 0.63.12(然后还在 0.66.4 上测试),使用 Postgres 9.4 作为数据库(并使用 v0.63.12 of Cirqus.Postgres 包)。
我找到问题了!似乎 PostgreSQL 事件源的 SQL 代码缺少 Order By
子句,在某些情况下我的事件被乱序返回。我提交了这个拉取请求作为对问题的建议修复:https://github.com/d60/Cirqus/pull/75
我偶尔会在 Cirqus 中尝试处理命令时收到异常。它发生在不同类型的命令中,但是它总是发生在这种特定的聚合根类型上(假设它是一个注册表单)。我们没有删除事件,也没有以任何方式弄乱事件 table,所以我想知道还有什么可能导致这个问题。
确切的(但匿名的)错误消息是: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,并在 return 中获得了 37 个事件。然后我检查了序列,序列似乎是正确的。我还检查了全局序列至少在时间顺序上也是正确的。然后我检查 "meta" 列是否具有与记录不同的全局序列,但也检查正常。
我觉得最困惑的是其他注册表单都可以通过。查看我们的日志,没有我可以识别的模式,而且它只发生大约 3-5% 的时间。
我想我想知道的是:什么会导致这个问题?我该如何调试它?我怎样才能防止它在未来发生?
系统细节:我们 运行 在 .net 4.5 下,使用 Cirqus 0.63.12(然后还在 0.66.4 上测试),使用 Postgres 9.4 作为数据库(并使用 v0.63.12 of Cirqus.Postgres 包)。
我找到问题了!似乎 PostgreSQL 事件源的 SQL 代码缺少 Order By
子句,在某些情况下我的事件被乱序返回。我提交了这个拉取请求作为对问题的建议修复:https://github.com/d60/Cirqus/pull/75