直接跳到内容

事务消息组件

简介

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

使用

系统配置中开启定时计划

ab:
  schedule:
    enable: true

常用属性配置介绍

属性名属性描述默认值
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