【RabbitMQ】事务

事务的简单配置及使用

RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制.

SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的,要么全部成功,要么全部失败.

配置事务管理器

java 复制代码
@Configuration
public class RabbitTemplateConfig {
   

    //事务
    @Bean("transRabbitTemplate")
    public RabbitTemplate transRabbitTemplate(ConnectionFactory connectionFactory){
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        //设置setChannelTransacted为true
        rabbitTemplate.setChannelTransacted(true);  
        return rabbitTemplate;
    }

    //配置事务管理器
    @Bean
    public RabbitTransactionManager rabbitTransactionManager(ConnectionFactory connectionFactory){
        return new RabbitTransactionManager(connectionFactory);
    }



}

声明队列

java 复制代码
@Configuration
public class RabbitMQConfig {
    @Bean("transQueue")
    public Queue transQueue(){
        return QueueBuilder.durable(Constant.TRANS_QUEUE).build();
    }
}

生产者代码

java 复制代码
@RestController
@RequestMapping("/producer")
public class ProducerController {

    @Resource(name = "transRabbitTemplate")
    private RabbitTemplate transRabbitTemplate;

    @Transactional
    @RequestMapping("/trans")
    public String trans(){
        //1. rabbitTemplate.setChannelTransacted(true);设置事务属性为true
        //2. 开启@Transactional注解
        //3. RabbitTransactionManager
        System.out.println("trans test...");
        transRabbitTemplate.convertAndSend("",Constant.TRANS_QUEUE, "trans test 1...");
        int num = 5/0;
        transRabbitTemplate.convertAndSend("",Constant.TRANS_QUEUE, "trans test 2...");
        return "消息发送成功";
    }
    
}

测试

下面基于我们编写的代码来进行一下简单的测试

@Transactional注解和不加@Transactional注解

我们先把注解屏蔽掉调用接口

此时再看看我们RabbitMQ的管理界面,可以看到第一条消息发送成功了

把消息删掉再加上@Transactional注解,再调用接口

可以看到此时我们的队列里就不会收到消息了


相关推荐
小bo波2 小时前
Java Swing 图形用户界面实验 —— 从算术练习到游戏开发的完整实践
java·课程设计·gui·游戏开发·扫雷·swing
咖啡八杯4 小时前
GoF设计模式——备忘录模式
java·后端·spring·设计模式
止语Lab7 小时前
一次 goroutine 泄漏:pprof 说有 10 万个 goroutine,但问题不在 channel
rabbitmq
SamDeepThinking14 小时前
裁掉那个差程序员后,给你看团队里高手的代码:这个习惯,希望你有
java·后端·程序员
朕瞧着你甚好15 小时前
技术雷达 & Java 集成评估报告 — Apache Tika 3.3.1
java·ai编程
MacroZheng16 小时前
短短几天,暴涨2.8万Star!又一款编程神器开源!
java·人工智能·后端
SamDeepThinking16 小时前
函数式编程:用BiFunction消除多类型分支的代码重复
java·后端·面试
Flittly1 天前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
小兔崽子去哪了1 天前
Java 生成二维码解决方案
java·后端
人活一口气2 天前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot