美文网首页
本地事务完成才发MQ消息

本地事务完成才发MQ消息

作者: Alen_ab56 | 来源:发表于2022-11-24 10:34 被阅读0次

前提

如果消息发送和本地事务在同一个@Transactional注解下,

如何保证本地事务结束才发送MQ消息?

@Transactional

    public void save() {

      1. 本地事务

       2. 发MQ;

    }

注意:MQ一定要在本地事务后面

解决方案如下

@Component

public class MQTransactionHelper {

    @Autowired

    private MqTemplate MqTemplate;

    public <T> void send(String queue, T message) {

        // 是否开启事务判断

        if (TransactionSynchronizationManager.isSynchronizationActive()) {

            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {

                @Override

                public void afterCommit() {

                    mqTemplate.send(message);

                }

            });

        } else {

            mqTemplate.send(message);

        }

    }

}

相关文章

  • MQ和Mysql二阶段提交

    MQ事务消息两阶段提交过程 主要的过程为: 1、先向服务端发送半事务消息,发送成功后执行本地事务 2、本地事务执行...

  • rocketmq的事务消息

    1 发送半消息2 mq server 发送半消息成功给发送方3 发送方收到后,执行本地事务4 发送方主动提交事务状...

  • RocketMQ事务消息

    概述 事务消息解决的问题是:Provider本地事务 + 消息投递 一起执行。解决应用端 和 MQ端两个独立的应用...

  • 分布式事务-最终一致性

    基于事务消息实现最终一致性。 通过MQ事务消息能力。 假设两个本地事务,对应服务A和服务B。 服务A: 发送一条事...

  • 什么是事务、半事务消息?怎么实现的?

    事务消息就是MQ提供的类似XA的分布式事务能⼒,通过事务消息可以达到分布式事务的最终⼀致性。半事务消息就是MQ收到...

  • RockMq事务消息原理

    场景: 通过mq 进行分布式事务的一致性控制,参考转账事务原理 目的: 保持本地事务和mq发送的原子性 过程: ...

  • 大厂面试系列(九):MQ和分布式事务

    MQ和分布式事务 MQ 项目中RabbitMQ实现了at least once,包括mq反馈provider,消息...

  • 分布式事务Saga介绍

    目前常见的分布式事务解决方案有:2pc、3pc、tcc、本地消息表、mq事务、Saga等,其方案对比如下图(从数据...

  • 【5分钟背八股】可靠消息服务方案是什么?

    可靠消息最终一致性方案指的是:当事务的发起方(事务参与者,消息发送者)执行完本地事务后,同时发出一条消息,事务参与...

  • 可靠消息的最终一致性

    事务发起方执行完事务后发送一条消息,事务的参与方一定能够接收到消息并处理事务成功。强调最终一致。 本地事务和消息发...

网友评论

      本文标题:本地事务完成才发MQ消息

      本文链接:https://www.haomeiwen.com/subject/dgfpxdtx.html