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