更新时间:2024-07-31 GMT+08:00
分享

方案概述

背景信息

在应用开发过程中,可能会存在一个核心业务逻辑的执行需要同时调用多个下游业务进行处理的场景。因此,如何保证核心业务和多个下游业务的执行结果完全一致,是事务需要解决的主要问题。

以某工厂整体业务流程为例,生产管理部向生产车间发放生产工单这一核心操作的同时会涉及到生产部的领料加工、采购部的原材料采购等多个子系统的变更。当前业务的处理分支包括:

  • 主分支生产工单系统状态更新:由待处理变更为生产中。
  • 加工系统状态变更:新增产品加工记录,新增用料记录。
  • 原材料采购状态变更:变更原材料数量,更新原材料库存表。

基于普通消息方案,将工单系统变更作为本地事务,剩下的系统变更作为普通消息的下游来执行。此时,消息下游分支和工单系统变更的主分支很容易出现不一致的现象。例如:

  • 消息发送成功,工单没有执行成功,需要回滚整个事务。
  • 工单执行成功,消息没有发送成功,需要额外补偿才能发现不一致。
  • 消息发送超时未知,此时无法判断需要回滚工单还是提交工单变更。

为了保证上述分支的执行结果一致,具备提交、回滚和统一协调的能力,工业数字模型驱动引擎-数据建模引擎(xDM Foundation,简称xDM-F)提供事务型任务功能,编排多个原子接口,并与本地事务绑定,实现多接口提交结果的一致性,并提升接口调用速率和性能。

操作流程

图1 事务型任务操作流程
  1. 创建事务型任务

    此接口需要设置执行iDME原子接口的数量,完成事务型任务的初始化。

  2. 执行iDME原子接口

    根据创建事务型任务时设置的原子接口数量,依次执行。执行的原子接口会被单独存储到iDME事务存储系统中,等待提交事务型任务返回执行结果后再统一提交。

  3. 提交事务型任务
    • 同步提交:原子接口按照指定顺序执行,需等待上一个原子接口执行完成后再执行下一个原子接口,适用于需要等待任务完成后才能继续执行的场景。例如,在读取文件或者网络请求时,应用需要等待文件读取完成后才能继续执行下一步操作。
    • 异步提交:各原子接口间串行执行,适用于需要同时执行多个任务的场景。例如,在多线程或者多进程的编程中,应用可以同时执行多个任务,提高应用的执行效率。

    所有原子接口都提交成功,则原子接口数据提交成功;否则,所有原子接口都进行数据回滚操作。

  4. 查询事务型任务执行结果

    您可以通过此接口快速搜索您想要的事务任务执行结果。

使用说明

  • v1版本事务型任务接口最多支持执行5个原子接口。v2版本事务型任务接口,在异步提交事务型任务的原子接口取消数量限制。
  • 不支持跨租户或跨数据源使用事务型任务功能。
  • 不支持非数据库操作(如文件上传)。

相关文档