事务消息组件

说明

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

使用

引入依赖

<dependency>
<groupId>com.dstz.agilebpm</groupId>
<artifactId>agilebpm-component-trxm</artifactId>
</dependency>

常用属性配置介绍

属性名 属性描述 默认值
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.agilebpm.component.trxm.caller.TrxmCaller,将实现类加入Spring容器中。
  2. 实现接口com.dstz.agilebpm.component.trxm.model.TransactionMessageModel,其中getCaller方法为1中加入Spring容器中的Bean Name。
  3. 使用时调用接口TransactionMessageService.add

注意

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

    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)