第 9 章 Saga EIP

9.1. 概述

Saga EIP 提供了一种方法,可以在 Camel 路由中定义一系列相关操作,这些操作可以成功完成或不能执行或编译。Saga 实施协调使用任何传输的分布式服务进行通信,达到全球一致性结果。Saga EIP 与典型的 ACID 分布式(XA)事务不同,因为保证不同参与服务的状态只在 Saga 结束时处于一致状态,而不是在任何中间步骤中保持一致。

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

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