当前位置: 首页 > news >正文

【RabbitMQ】事务

事务的简单配置及使用

    • 配置事务管理器
    • 声明队列
    • 生产者代码
    • 测试

在这里插入图片描述

RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制.
SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的,要么全部成功,要么全部失败.

配置事务管理器


@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);
    }



}

声明队列

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

生产者代码

@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注解,再调用接口
在这里插入图片描述
在这里插入图片描述
可以看到此时我们的队列里就不会收到消息了
在这里插入图片描述


在这里插入图片描述

相关文章:

  • 查看端口被占用命令
  • FX-函数重载、重写(覆盖)、隐藏
  • Rust与Cargo版本关系(Rust版本、rustc、rustup)
  • 信息安全意识之安全组织架构图
  • ubuntu 24.04通过Flatpak安装迅雷
  • Dom详解
  • 02 | 快速部署 fastgo 项目
  • 在 Spring Boot 中实现基于 TraceId 的日志链路追踪
  • vue3-element-admin 前后端本地启动联调
  • IntelliJ IDEA v2024.3.4.1 Windows Java开发工具安装
  • 瑞芯微RK3576(2)-调试过程中遇到的问题
  • 如何用AI制作我们记忆中的乡村夜景
  • 获取URL字段的方法
  • 【反无人机目标检测数据集】空对空视觉检测微型无人机:深度学习的实验评估
  • C语言每日一练——day_4
  • 力扣(leetcode)每日一题 2012 数组美丽值求和
  • Linux 磁盘和文件系统管理
  • SpringMVC 基本概念与代码示例
  • 数据结构之线性表
  • Django-ORM-prefetch_related
  • KPL“王朝”诞生背后:AG和联赛一起迈向成熟
  • “11+2”复式票,宝山购彩者领走大乐透1170万头奖
  • 国家林业和草原局原党组成员、副局长李春良接受审查调查
  • 中美是否计划讨论美方以芬太尼为由对华征收的特别关税?外交部回应
  • 专访|导演刘江:给谍战题材注入现实主义的魂
  • 《AI×SCIENCE十大前沿观察》9:合成数据和数据基础设施