第 9 章 saga EIP
9.1. 概述
Saga EIP 提供了在 Camel 路由中定义一系列相关操作的方法,这些操作可以成功完成或未执行或未执行。saga 实现使用向全球一致结果的任何传输协调分布式服务。saga EIP 与典型的 ACID 分布式(XA)事务不同,因为不同参与服务的状态保证只在 Saga 结束时保持一致,而不是在任何中间步骤中。
saga EIP 适用于不建议使用分布式事务的用例。例如,参与 Saga 的服务允许使用任何类型的数据存储,如典型的数据库甚至 NoSQL 非事务数据存储。它们还适合在无状态云服务中使用,因为它们不需要与服务一起存储事务日志。Sga EIP 也不需要在少量时间内完成,因为它们不使用数据库级别的锁定,这与事务不同。因此,它们可能会处于较长的时间跨度,从几秒到几天。
saga EIPs 不对数据使用锁定。相反,它们定义了 Compensating Action 的概念,它是标准流遇到错误时应执行的操作,其目的是恢复流执行前存在的状态。使用 Java 或 XML DSL 在 Camel 路由中声明操作,且仅在需要时由 Camel 调用(如果因为错误取消了 saga )。