这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战
命令协同式
把Saga的决策和执行顺序逻辑集中在一个Saga控制类中,它以命令/回复的方式与每项服务进行通信,告诉它们应该执行哪些操作。
命令协同式需要定义一个Saga协调器,负责告诉每一个参与者需要做什么,Saga协调器以命令或回复的方式与每项服务进行通信。
命令协同式实现步骤如下:
- 订单服务创建一个订单,之后创建一个订单Saga协调器,启动订单服务。
- Saga协调器向库存服务发送冻结库存命令,库存服务通过 order Saga Reply Queue回复执行结果。
- Saga协调器向支付服务发送账户扣款命令,支付服务通过Order Saga Reply Queue回复执行结果。
- Saga协调器向积分服务发送增加积分命令,积分服务回复执行结果。
注意点:
Saga协调器需要提前知道创建订单事务的所有流程(Saga通过基于JSON的状态机引擎实现的),在整个流程中任何一个环节执行失败,它都需要向每个参与者发送命令撤销之前的事务操作。
Seata安装
Seata是一个需要独立部署的中间件,除直接部署外,它还支持多种部署方式,比如Docker、Kubernetes等,
安装步骤:
-
在Seata官网下载1.0.0版本的安装包
-
进入${seata_home}\bin目录,根据系统类型执行相应的启动脚本,在Linux/Max下执行命令如下:
sh seata-server.sh -
seata-server.sh支持设置启动参数,完整的参数列表如下:
参数 全写 作用 备注
-h -host 指定在注册中心注册的IP 不指定时获取当前的IP地址,外部访问部署在云环境和容器中的 server,建议指定
-p -port 指定server启动的端口号 默认是8091
-m -storeMode 事务日志存储方式 支付file和db,默认为file
-n -serverNode 用于指定seata-serverk节点的ID 如1,2,3...,默认为1
-e -seataEnv 指定seata-server的运行环境 如dev、test等,服务启动时会使用registry-dev.conf的配置