外观
事务消息组件
简介
该组件支持事务的最终一致性,用于解耦式可靠的业务通知。
事物消息执行出错后存在重试机制,在重试达到一定次数时将需要人工干预。
建议业务方做好幂等,防止极端情况下异常问题。
使用
系统配置中开启定时计划
ab:
schedule:
enable: true
常用属性配置介绍
属性名 | 属性描述 | 默认值 |
---|---|---|
ab.trxm.retry-times | 调用出错重试次数 | 3 |
ab.trxm.threads | 事务消息处理线程数 | cpu * 2 + 1 |
ab.trxm.queues | 事务消息处理线程数 | 100 |
事务消息状态说明
待处理
表示消息未被处理或处理出错后将继续重试
已死亡
表示消息已不在继续调用重试,出现该消息情况分为以下几种:
- 消息调用出错超过最大处理次数
- 消息未找到处理类
@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){
.....
}
}
日志管理
管理功能位于:
系统-事务消息-事物消息队列 系统-事务消息-事物消息日志
常见问题
如何自定义实现接入事务消息
- 实现接口
com.dstz.component.trxm.api.caller.TrxmCaller
,将实现类加入 Spring 容器中。 - 实现接口
com.dstz.component.trxm.api.model.TransactionMessageModel
,其中getCaller
方法为 1 中加入 Spring 容器中的 Bean Name。 - 使用时调用接口
TransactionMessageService.add
注意
实现
TrxmCaller.call
时,如需要支持事务,需在实现方法上加入事务注解@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)