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");
        // 发送消息。
    }
}
相关推荐
l1t6 小时前
对clickhouse给出的二分法求解Advent of Code 2025第10题 电子工厂 第二部分的算法理解
数据库·算法·clickhouse
IT大白6 小时前
6、数据库优化
数据库·sql
努力学习的小廉6 小时前
【QT(九)】—— 窗口
数据库·qt·系统架构
程序员敲代码吗6 小时前
用Python监控系统日志并发送警报
jvm·数据库·python
m5655bj6 小时前
使用 C# 将 Excel 表格转换为 DataTable
数据库·c#
Thomas21436 小时前
spark view永久保存 + paimon对应的view
大数据·分布式·spark
_codemonster6 小时前
分布式深度学习训练框架Horovod
人工智能·分布式·深度学习
丁丁点灯o6 小时前
帆软指定某个列连续相同的数值合并单元格
数据库
DBA小马哥6 小时前
文档型数据库MongoDB迁移替换至金仓数据库在电商商品信息存储中的应用
数据库·mongodb
世界尽头与你6 小时前
CVE-2025-14847_ MongoDB 未授权内存泄露漏洞
数据库·安全·mongodb·网络安全·渗透测试