seata事务集成kafka

seata事务或本地事务,完成commit后,发送kafka消息;如果事务回滚,不发送消息。

方法可以加@Transactional本地事务注解,也可以加@GlobalTransactional全局事务注解。

发送消息的类:

java 复制代码
@Service
public class MessageSendAfterCommit {
    @Autowired
    ApplicationEventPublisher eventPublisher;
    @Autowired
    private MessageQueueService messageQueueService;

    public void send(String message) {
        GlobalTransaction globalTransaction = GlobalTransactionContext.getCurrent();
        if(!isSeataTransaction()) {
            // 不是seata事务
            eventPublisher.publishEvent(message);
        } else {
            // seata事务
            MessageTransactionHook messageTransactionHook = new MessageTransactionHook(message);
            TransactionHookManager.registerHook(messageTransactionHook);
        }

    }

    private boolean isSeataTransaction() {
        return StrUtil.isNotBlank(RootContext.getXID());
    }

    class MessageTransactionHook extends TransactionHookAdapter {
        private String messageContent;
        public MessageTransactionHook(String message) {
            this.messageContent = message;
        }
        @Override
        public void afterCommit() {
            System.out.println("This is Kevin");
            // 这里发送消息。
        }
    }
}

如果是本地事务,需要发送spring事件,由监听器监听后发消息:

java 复制代码
@Component
public class TransactionEventListeners {
    @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
    public void kevinTestInfoReq(String req) {
        System.out.println("kevin Zhang Transaction");
        // 发送消息。
    }
}
相关推荐
一 乐1 小时前
二手交易平台|基于springboot + vue二手交易平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序
SelectDB1 小时前
同等资源下 Apache Doris 4.2 vs StarRocks 4.1.1:1TB SSB 与 TPC-H 性能实测
大数据·数据库·数据分析
这个DBA有点耶2 小时前
数据库集群与分布式架构:三条技术路线对比、金仓KES RAC实测数据与决策框架
数据库·程序员·架构
MayBaymax2 小时前
MongoDB 索引与事务
java·数据库·mongodb
SelectDB2 小时前
Doris vs ClickHouse:企业 OLAP 走向下一阶段,两种技术路线如何选择
大数据·数据库·数据分析
vx-程序开发2 小时前
【计算机毕设】django校园跑腿服务系统83141
java·数据库·vue.js·spring boot·spring·elasticsearch·django
一 乐2 小时前
养老院管理系统|基于springboot + vue养老院管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
这个DBA有点耶3 小时前
InnoDB页结构深入:页分裂、页合并、填充因子——B+树底层机制全解析
数据库·mysql·架构
山岚的运维笔记4 小时前
mysql 专业笔记 -- 第 36 章:MySQL 管理
运维·数据库·笔记·后端·mysql·oracle·dba
阳光宅男@李光熠4 小时前
【电子通识】一起学习TDK的EMC基础——电池兼容设计方法概述
java·前端·数据库