完全成功事务场景 (Fully Success Transaction)

在此场景中,Saga 执行协调器 (SEC) 成功推进并执行了链路中的所有执行器 (Executors)。因此,全程未触发任何逆向补偿回滚操作。这是所有业务交易最理想的成功黄金路径。

StackSaga 高层级执行架构图
  • 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 向客户下发最终交易成功凭证。