完全成功事务场景 (Fully Success Transaction)
在此场景中,Saga 执行协调器 (SEC) 成功推进并执行了链路中的所有执行器 (Executors)。因此,全程未触发任何逆向补偿回滚操作。这是所有业务交易最理想的成功黄金路径。
-
1 用户发起请求:客户端发起下单请求,由 Spring MVC 的
OrderController接收请求入口。 -
2 初始化领域实体与启动执行器:控制器接收到请求后,初始化下单领域的
DomainEntity实例,并将起始执行器 (CreateOrderExecutor) 配置给 StackSaga 引擎。 (在此阶段,框架已自动为该请求生成了全局唯一的transaction uid。该唯一标识符代表该事务实例的生命周期,可直接从您创建的DomainEntity对象中获取。) -
3 SEC 协调接管:事务进入由 SEC 完全托管的状态机调度。 在调用您指定的起始执行器之前,SEC 会首先将
DomainEntity的初始状态快照原子保存至事件存储 (Event Store) 中。 -
4 执行起始执行器 (
[Command] CreateOrderExecutor):-
4.1 SEC 调度执行器的
doProcess方法,进而调用本地订单服务InternalOrderService的createOrder()方法。 -
4.2 该本地方法成功返回后,SEC 将领域实体的最新状态快照更新持久化到事件存储中。
-
4.3 状态快照保存完成后,SEC 自动回调您在 Handler 处理器中实现的
onEachProcessPerformed钩子方法。 -
4.4 您可以在该回调中执行自定义业务逻辑以更新订单状态。在示意图中,我们调用了
InternalOrderService的updateCustomerOrderStatus()方法。 -
4.5 更新状态后,系统可通过发送邮件或短信通知客户订单已成功创建。
-
-
5 执行第 2 个执行器 (
[Query] UserExecutor):起始执行器成功后,指定导航至第 2 个执行器。-
5.1 SEC 触发只读查询执行器
[Query] UserExecutor的doProcess方法,调用ExternalUserStatusService的checkUser()方法。 -
5.2
ExternalUserStatusService向下游的user-service(用户微服务)发起远程调用以验证用户信息。 -
5.3 远程调用成功返回后,SEC 保存第 2 个步骤的领域实体快照。
-
5.4 SEC 回调 Handler 类的
onEachProcessPerformed方法。注:由于该执行器属于纯只读的 QueryExecutor,因此在此处无需执行任何状态变更或订单数据更新。
-
-
6 执行支付执行器 (
[Command] PaymentExecutor):-
6.1 SEC 调用
[Command] PaymentExecutor的doProcess方法,触发ExternalPaymentService的makePayment()方法。 -
6.2
ExternalPaymentService向外部的payment-service(支付微服务)发起远程扣款请求。 -
6.3 扣款调用成功后,SEC 持久化领域实体的更新状态。
-
6.4 SEC 回调 Handler 的
onEachProcessPerformed方法。 -
6.5 在回调中调用
updateCustomerOrderStatus()将订单状态变更为“已支付”。 -
6.6 向客户推送支付成功的通知消息。
-
-
7 执行发货执行器 (
[Command] DeliveryExecutor):-
7.1 SEC 调用
[Command] DeliveryExecutor的doProcess方法,触发ExternalDeliveryService的addToDelivery()方法。 -
7.2
ExternalDeliveryService远程调用delivery-service(物流派送服务),请求将包裹加入派送队列。 -
7.3 调用成功后,SEC 记录状态快照。
-
7.4 SEC 回调 Handler 的
onEachProcessPerformed方法。 -
7.5 更新订单流转状态为“配送中”。
-
7.6 发送短信或 App 推送通知客户订单已出库。
-
-
8 事务成功终结:作为全流程的最终里程碑,SEC 回调 Handler 的
onTransactionCompleted方法。-
8.1 将订单最终状态标记为全局已完成(
SUCCESS)。 -
8.2 向客户下发最终交易成功凭证。
-