_ _
| | | |
___ __ _| |_ _| |_ ___
/ __|/ _` | | | | | __/ _ \
\__ \ (_| | | |_| | || __/
|___/\__,_|_|\__,_|\__\___|
首先,给出Seata生命周期的定义
- TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID。
- XID 在微服务调用链路的上下文中传播。
- RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。
- TM 向 TC 发起针对 XID 的全局提交或回滚决议。
- TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。
一开始不太理解seata的生命周期(调用过程),反复多次阅读文档后,发现seata的生命周期如果不那么术语化去理解反而更好理解,
这里我们用一个生活中的例子来理解
首先,将TM比作村委会,TC比作当地*,RM比作村民
1.首先村委会商议决议出一个提案为村民谋福利,将提案上报给当地* — 申请开启全局事务
当地*下发提案申请表,要求村委会将详细说明填写好后提交 — 提案申请表就是那个全局唯一的 XID
2.村委会下发该提案告知村民,并征集村民意见 — 村民都知道消息了就相当于XID 在微服务调用链路的上下文中传播
3.村民统一意见后,上报给村委会 — 就相当于村民加入了这个事务
4.虽然决定由村民决定,但是对接*的是村委会 — 相当于TM 向 TC 发起针对 XID 的全局提交或回滚决议
5.*接收到消息后,执行该提案(或是拨款,或是给补给) — TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求