场景
已经应用了Saga模式,为了可靠性,每当服务状态改变时,服务必须以原子性方式发布事件。使用一个跨数据库和消息代理的分布式事务是不切实可行的。
问题
每当状态改变的时候,如何可靠地/原子地发布事件?
约束条件
2PC不是一个选项。
解决方案
跟踪定位数据库事务日志并且将每个改变作为事件发布。
实例
Eventuate Local使用事务日志跟踪。
影响
该模式有如下的优点:
没有2PC
不需要应用做出改变
保证准确度
该模式有如下的弊端:
相当的难以理解
必须是特定的数据库
很难处理如何避免重复发布
底层DB改变使得很难决定业务层面的事件