嗨,我有以下塞纳里奥我不明白如何让最终一致性:域事件和版本没有CQRS
- 用户1使用基于任务的用户界面更改客户名称
- 应用服务调用操作上上客户名称骨料
- 骨料火灾事件改变
- 总线使用nservicebus
- NServicebus服务裸片发送消息
- 用户2得到聚集,并呼吁改变地址
- 聚合操作称为
- 域触发的事件
- 信息放在总线
- 客车重新启动
- 消息2拿起第一
- 消息2处理等有限上下文更新了新地址
- 消息1现在拿起这是错误的订单
- 现在会发生什么
如果我们在事件中传递聚合的版本,那么13中会有乐观的并发错误吗?
如果是这样,消息1新获取应用于其他上下文中的对象。我们如何保持一致?
这是阻止我在我的域中应用事件的问题。所有帮助欢迎。
基本的想法是在另一个上下文中更新另一个聚合。我只是停留在这个并发技术上。
在命令处理程序和命令按下总线的意义上,我们不使用事件源或CQRS。只有我们想要异步发生的事件处理,因为我们有一个我们不希望改变的现有设计。
Blair
我不确定你的意思。我通过nservicebus发送活动,所以没有订购。如果我为我的事件添加序列号,我该如何在另一端执行排序?我错过了什么,一定有什么明显的我没有看到。 – 2013-03-02 12:17:15
也有NServicebus与多个线程不保证他们将按顺序处理。 – 2013-03-02 12:19:59
跟踪另一端的序列号。在序列号匹配'最后处理的序列号+ 1'之前不要处理该消息。 – 2013-03-02 12:21:09