这就是我的想法。当使用 MongoDB 等每个操作都是原子操作并且不支持除此之外的事务时,您是否发现这种模拟两阶段提交的解决方法有任何问题?
transaction_scope:
read message from servicebus - UpdateCustomerAddress
get customer aggregate from docdb, replay events where commited =1
call customer.updateAddress
validates
creates customer address updated event
apply event
event store as uncommitted events
do optimistic concurrency update against docdb pushing uncommitted events (single op to ensure consistency)
publish event to service bus
update docdb set events just published to commited = 1 (again one 1 op - at least in mongodb)
transaction_complete
NServiceBus 或任何从命令处理程序基础设施管理外部事务范围的东西。从我看来,我们应该具有与 2pc 几乎相同的语义 - 但我觉得我错过了一些东西。
A 两阶段提交 wiki 页面 http://www.mongodb.org/display/DOCS/two-phase+commit最近已添加到 mongodb 网站。它描述了 2-PC 算法并讨论了一些故障场景。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)