第 9 章 Saga EIP

9.1. 概述

Saga EIP 提供了一种方式,可以在 Camel 路由中定义一系列相关操作,它们可以成功完成或未执行或不兼容。Saga 实施协调使用任意传输向全球一致的结果进行通信的分布式服务。Saga EIP 与 classical ACID 分布式(XA)事务不同,因为不同参与服务的状态仅在 Saga 的末尾保持一致,而不在中间步骤中保持一致。

Saga EIP 适用于不使用分布式事务的用例。例如,参与 Saga 的服务允许使用任何类型的数据存储,如类数据库,甚至 NoSQL 非事务数据存储。它们也适合用于无状态云服务,因为它们不需要与服务一起存储事务日志。Saga EIP 也不需要以少量时间完成,因为它们不使用数据库级别的锁定,这与事务不同。因此,他们可以生存时间较长的时间,从几秒钟到几天。

Saga EIP 不使用数据上的锁定。相反,它们定义了 Compensating Action 的概念,它是标准流遇到错误时应执行的操作,但恢复流执行前的状态的目的。可以使用 Java 或 XML DSL 在 Camel 路由中声明各种操作,且只在需要时(如果 saga 被因为错误而取消)才会调用。