张帆
张帆
Published on 2025-09-09 / 36 Visits
0
0

IMOM事务集成-2.1.0

1. 事务能力

  • IDME事务(IDME原子接口事务)

  • 华为MBM事务(华为MBM提供的接口,可以是原子接口、OpenAPI、私有接口, 接口范围由华为方提供)

  • 分布式事务(涉及跨IMOM微服务调用)

#2. 事务使用方法

#2.1 使用注解 @DmeTransactional 开启事务, 注解参数说明如下

  • distributed: 是否为应用分布式事务,默认为false

  • transactionalType: 事务类型, 默认为TransactionalType.IDME, 可选的配置TransactionalType.IDME、TransactionalType.MBM,IDME为需要开启IDME事务,MBM为需要开启华为MBM事务, 支持多个配置

#2.2 常用场景注解使用样例

  1. 只有当前服务开启IDME事务, @DmeTransactional

  2. 只有当前服务开启MBM事务, @DmeTransactional(transactionalType = TransactionalType.MBM)

  3. 只有当前服务同时开启IDMEMBM事务, @DmeTransactional(transactionalType = {TransactionalType.IDME, TransactionalType.MBM})

  4. 分布式场景开启IDME事务, @DmeTransactional(distributed = true)

  5. 分布式场景开启MBM事务, @DmeTransactional(distributed = true, transactionalType = TransactionalType.MBM)

  6. 分布式场景同时开启IDMEMBM事务, @DmeTransactional(distributed = true, transactionalType = {TransactionalType.MBM, TransactionalType.IDME})

  7. 同一个请求想开多个事务, 可以通过开新线程执行达到开新事物的目的

#2.3 事务作用范围及注意事项

  1. 同一个微服务多个事务注解时, 只有调用链路上第一个直接会生效, 后续所有的事务注解都会失效, 会直接沿用第一个事务注解配置

  2. 跨IMOM微服务使用事务时, 只有调用链路上第一个直接会生效, 后续所有的事务注解都会失效, 会直接沿用第一个事务注解配置

  3. IDME v3版事务接口最多支持执行10个原子接口; 在同一台设备(即同一个IP地址)上,每秒最多可以开启30个v3版本事务

  4. 调用华为MBM支持事务的接口时,如果开启了MBM事务, 那调用该接口后,接口的返回值不能使用, 华为是在提交那一步执行此接口的 分布式事务作用范围

#3. 其他介绍

#3.1 IDME事务

  1. 涉及的接口为IDME原子接口包含以下字符的接口createupdatedelete

  2. 👉🏻 IDME事务方案官方手册(opens new window)

#3.2 华为MBM事务

  1. 调用方法时不立刻执行,再提交事务才实际执行

  2. MBM事务方案说明:

  3. MBM事务支持的接口清单:

  • deduct-materials:物料扣减: /imes/siteSfcService/openapi/v1/upload-materials/deduct

  • pass-station-wait:签收: /imes/siteSfcService/v1/open-api/pass-station/wip-wait

  • pass-station-trackin:在制品进站: /imes/siteSfcService/v1/open-api/pass-station/wip-trackin

  • pass-station-trackout:在制品出站: /imes/siteSfcService/v1/open-api/pass-station/wip-trackout

  • pass-station-leave:在制品离站: /imes/siteSfcService/v1/open-api/pass-station/wip-leave

  • create-wip-transaction:在制品交易创建: /imes/siteSfcService/dynamic/api/T_SFC_WIP_TRANSACTION/create

  • update-barcode:条码更新: /imes/siteSfcService/v1/barcode

  • batch-update-wip-info:批量更新在制品信息: /imes/siteSfcService/openapi/v1/wip-info/batch-update

  • batch-update-work-order:批量更新工单: /imes/sfcService/openapi/v1/wos/batch-update

  • batch-create-erp-wos:批量创建ERP工单: /imes/sfcService/openapi/v1/erp-wos/batch-create

  • wo-update:更新工单: /imes/sfcService/dynamic/api/Wo/update

  1. 部署华为MBM服务时(华为MBM服务指的是支持事务的华为应用,例如sfc、wom服务等),需要配置行业包IDME地址

  2. 增加其他事务接口, 涉及的接口为华为MBM指定的接口, dme-sdk-core中已经集成了目前支持的接口, 需要增加其他接口可以通过以下两种方式增加, 不论哪种方式增加的如果是通用的都要提供给框架组添加进dme-sdk-core

  • 通过代码修改

//取出系统已经配置的接口
Map<String, TxActionApi> txActionApiMap =MbmProxyConfiguration.txActionApi.stream()
                    .collect(Collectors.toMap(TxActionApi::getActionName, Function.identity()));
//添加新的接口, 采用MAP是为了手工配置的与系统已经配置接口重复
TxActionApi txActionApi = new ArrayList();
// txActionApi 为要添加的接口列表需要手工赋值
txActionApi.forEach(txActionApi -> txActionApiMap.put(txActionApi.getActionName(), txActionApi));
// 重新赋值
MbmProxyConfiguration.txActionApi = new ArrayList<>(txActionApiMap.values());
  • 通过配置修改, 需要引入依赖dme-sdk-starter pom.xml配置

        <dependency>
            <groupId>com.sie.mbm</groupId>
            <artifactId>dme-sdk-starter</artifactId>
        </dependency>

common.yml配置

hwmbm:
  domain: XXX
  service: dynamic/api
  executeService: rdm/basic/api/customservice
  commonService: rdm/common/api
  subApp:
    - name: mdm
      url: imes/mdmService
    - name: wom
      url: imes/sfcService
    - name: ems
      url: imes/emsService
    - name: les
      url: imes/lesService
    - name: qms
      url: imes/qmsService
    - name: sfc
      url: imes/siteSfcService
    - name: mpdm
      url: imes/mpdmService
    - name: msm
      url: imes/msmService
  # MBM事务接口配置
  txActionApi:
    # 动作名称, 华为提供,例如:deduct-materials
    - actionName: XXX
    # 动作描述, 主要用于日志展示,例如:扣减物料
      actionDesc: XXX
    # 接口方法, 华为提供, 例如:POST、GET、PUT、DELETE等 
      httpMethod: POST
    # 接口链接, 华为提供, 例如:/imes/siteSfcService/openapi/v1/upload-materials/deduct
      actionUri: XXX
    # 是否启用, 默认启用
      enable: true #
    # 模拟响应, 原接口需要异步执行,此处是模拟返回,避免解析响应出错
      result: null

#3.3 升级包

        <!-- mbm-mom-framework 所涉及的包统一升级, 要注意项目有没有单独引版本 -->
        <dependency>
                <groupId>com.sie.mbm.mom</groupId>
                <artifactId>framework-bom</artifactId>
                <version>2.0.2-SNAPSHOT</version>
        </dependency>
        
        <!-- mbm-dme-sdk 所涉及的包统一升级, 要注意项目有没有单独引版本 -->
        <dependency>
            <groupId>com.sie.mbm</groupId>
            <artifactId>dme-sdk-spring</artifactId>
            <version>2.0.2-SNAPSHOT</version>
        </dependency>
        
       <!-- mbm-mom-common在framework里面会升级, 要注意项目有没有单独引版本 -->
       <dependency>
            <groupId>com.sie.mbm.mom</groupId>
            <artifactId>mbm-mom-common</artifactId>
            <version>2.0.1-SNAPSHOT</version>
        </dependency>
        
        <!-- mbm-mom-sdk所涉及的包统一升级, 要注意项目有没有单独引版本 -->
        <dependency>
            <groupId>com.sie.mbm.mom</groupId>
            <artifactId>mom-sdk-api</artifactId>
            <version>2.0.4-SNAPSHOT</version>
         </dependency>
         
         <!-- public行业包微服务升级 -->

#3.4 查看详细的事务日志

    <logger name="com.sie.dme.sdk.executeDme" level="DEBUG" additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="debug"/>
    </logger>



Comment