直接跳到内容
本页目录

作者:lightning
更新于:6/30/2023

说明

该组件支持事务的最终一致性,用于解耦式可靠的业务通知。 事物消息执行出错后存在重试机制,在重试达到一定次数时将需要人工干预。 建议业务方做好幂等,防止极端情况下异常问题。

使用

引入依赖

      <dependency>
            <groupId>com.dstz</groupId>
            <artifactId>ab-component-trxm-api</artifactId>
            <version>${project.version}</version>
        </dependency>

系统配置中开启定时计划

ab:
  schedule:
    enable: true

在 系统-系统功能-定时计划 新增一条定时计划 key为transactionMessageWaitStatusJob

常用属性配置介绍

属性名属性描述默认值
ab.trxm.retry-times调用出错重试次数3
ab.trxm.threads事务消息处理线程数cpu * 2 + 1
ab.trxm.queues事务消息处理线程缓存队列100

事务消息状态说明

待处理

表示消息未被处理或处理出错后将继续重试

已死亡

表示消息已不在继续调用重试,出现该消息情况分为以下几种:

  1. 消息调用出错超过最大处理次数
  2. 消息未找到处理类

@AbMessage注解

AbMessage在主事务提交后,将异步被调用,保证事务的最终一致性

public class OrderService {
      @Autowride
      private TransactionMessageService  transactionMessageService;

      @Trsanction(rollbackFor=Exception.class)
      public void payOrder(String orderNo){
          transactionMessageService.add(AbMessageTransactionMessageModel.newInstance("orderComplete", "11111111111"));
      }

      @AbMessage(subscribeKey = "orderComplete")
      public void orderComplete(String orderNo){
          .....
      }
  }

日志管理

管理功能位于:

系统-事务消息-事物消息队列 系统-事务消息-事物消息日志

常见问题

如何自定义实现接入事务消息

  1. 实现接口com.dstz.component.trxm.api.caller.TrxmCaller,将实现类加入Spring容器中。
  2. 实现接口com.dstz.component.trxm.api.model.TransactionMessageModel,其中getCaller方法为1中加入Spring容器中的Bean Name。
  3. 使用时调用接口TransactionMessageService.add

注意

  1. 实现TrxmCaller.call时,如需要支持事务,需在实现方法上加入事务注解

    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
    
事务消息 has loaded