没有CQRS的域事件和版本控制

Bla*_*son 5 domain-driven-design event-handling eventual-consistency optimistic-locking domain-events

嗨,我有以下senario,我不明白如何获得最终的一致性:

  1. 用户1使用基于任务的ui来更改客户名称
  2. App Service调用聚合操作
  3. 客户名上的聚合火灾事件已更改
  4. 总线使用nservicebus发送消息
  5. NServicebus服务终止
  6. 用户2获取聚合并调用更改地址
  7. 聚合操作调用
  8. 域事件被触发
  9. 消息放在公交车上
  10. 总线重启
  11. 消息2首先被捕获
  12. 处理消息2并使用新地址更新其他有界上下文
  13. 消息1现在拾起,这是错误的顺序
  14. 现在发生了什么

如果我们在事件中传递聚合的版本,那么在13中会出现乐观的并发错误吗?

如果是,则将消息1新应用于其他上下文中的对象.我们如何保持一致性?

这是阻止我在我的域中应用事件的问题.欢迎所有帮助.

基本思想是在另一个上下文中更新另一个聚合.我只是坚持这个并发技术.

我们不是在命令处理程序和命令推送总线的意义上使用事件源或CQRS.只有事件处理我们想要异步发生,因为我们有一个我们不希望改变的现有设计.

布莱尔

Gre*_*ung 3

一般来说,您会对消息进行排队。如果他们要排队,您将得到正确的排序。如果您想使用不支持服务总线排序的内容,请向您的事件添加序列号,以便另一方可以正确地对它们重新排序。TCP 自 1981 年以来一直在这样做http://www.ietf.org/rfc/rfc793.txt :)