【RabbitMQ、Spring Boot】Spring Boot整合RabbitMQ事务消息机制

本文介绍了如何在SpringBoot中配置并使用RabbitMQ的事务消息机制,通过示例展示了如何在发送者端开启@Transactional注解,并讨论了消息确认机制与事务机制的配合使用。在示例中,发送者发送消息后延迟5秒,消费者仍能接收到消息,证明了事务的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Spring Boot整合RabbitMQ事务消息机制

注释application.yml中配置的消息确认机制,因为使用事务消息机制,不能同时使用消息确认机制

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 7006
    username: admin
    password: admin
    # 是否触发回调方法
    # NONE值是禁用发布确认模式,是默认值
    # CORRELATED值是发布消息成功到交换器后会触发回调方法,如1示例
    # SIMPLE值经测试有两种效果,其一效果和CORRELATED值一样会触发回调方法,其二在发布消息成功后使用rabbitTemplate调用waitForConfirms或waitForConfirmsOrDie方法等待broker节点返回发送结果,根据返回结果来判定下一步的逻辑,要注意的点是waitForConfirmsOrDie方法如果返回false则会关闭channel,则接下来无法发送消息到broker;
#    publisher-confirm-type: correlated

注册RabbitMQ事务管理器

package com.cyun.demo.rabbitmq.provider.config;

import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.transaction.RabbitTransactionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * RabbitMQ配置类
 *
 * @author He PanFu
 * @date 2022-04-18 19:16:52
 */
@Configuration
public class RabbitmqConfig {

    /**
     * 注册rabbitmq事务管理器
     *
     * @param connectionFactory 连接工厂
     * @param rabbitTemplate    rabbit模板
     * @return rabbitmq事务管理器
     */
    @Bean
    public RabbitTransactionManager rabbitTransactionManager(CachingConnectionFactory connectionFactory, RabbitTemplate rabbitTemplate) {
        // channel开启事务支持
        rabbitTemplate.setChannelTransacted(true);

        return new RabbitTransactionManager(connectionFactory);
    }
}

发送者发送消息:需使用@Transactional(rollbackFor = Exception.class)事务注解

    @GetMapping("/direct/wx/transactional")
    @Transactional(rollbackFor = Exception.class)
    public String sendDirectMessageTransactional() {
        rabbitTemplate.convertAndSend("direct_exchange", "wx", getStringObjectMap());

        log.info("开启事务消息机制");
        try {
            Thread.sleep(5000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "ok";
    }

结果展示:消费者收到消息和发送者发出消息间隔了5s
在这里插入图片描述
参考链接:
Spring Boot整合RabbitMQ——生产者发送确认

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值