【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注解,再调用接口

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


相关推荐
毕设源码-邱学长5 小时前
【开题答辩全过程】以 基于Java的学校住宿管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
兑生6 小时前
【灵神题单·贪心】1481. 不同整数的最少数目 | 频率排序贪心 | Java
java·开发语言
daidaidaiyu6 小时前
一文学习 Spring 声明式事务源码全流程总结
java·spring
零雲8 小时前
java面试:了解抽象类与接口么?讲一讲它们的区别
java·开发语言·面试
左左右右左右摇晃10 小时前
Java并发——synchronized锁
java·开发语言
sxlishaobin11 小时前
Java I/O 模型详解:BIO、NIO、AIO
java·开发语言·nio
彭于晏Yan11 小时前
Spring AI(二):入门使用
java·spring boot·spring·ai
有一个好名字12 小时前
vibe codeing 开发流程
java
兑生12 小时前
【灵神题单·贪心】3745. 三元素表达式的最大值 | 排序贪心 | Java
java·开发语言
polaris063012 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat