Spring Boot集成RabbitMQ的使用

50 篇文章 0 订阅
24 篇文章 0 订阅

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主
📌 擅长领域:全栈工程师、爬虫、ACM算法
🔥 微信:zsqtcyw 联系我领取学习资料

🎈引言

RabbitMQ是一个开源的消息代理和队列服务器,用来实现各个应用服务间的数据共享(跨平台,跨语言)。RabbitMQ是使用Erlang语言编写的,并且基于AMQP协议实现。它适用于需要低延迟、高吞吐量的消息传递场景,如金融交易、事件驱动架构等。Spring Boot提供了spring-boot-starter-amqp组件,使得与RabbitMQ的集成变得简单快捷。本文将详细介绍如何在Spring Boot项目中集成RabbitMQ,并实现消息的发送与接收。

🎈引入依赖

首先,在Spring Boot项目的pom.xml文件中引入RabbitMQ的依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    <version>3.2.7</version> <!-- 请根据实际情况调整版本号 -->
</dependency>

🎈配置RabbitMQ

在application.yml或application.properties配置文件中配置RabbitMQ的连接信息。

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest

🎈交换机、队列和绑定

RabbitMQ中的核心组件包括交换机(Exchange)、队列(Queue)和绑定(Binding)。交换机根据路由键(Routing Key)将消息路由到不同的队列中。在Spring Boot项目中,可以通过配置类来声明交换机、队列和它们之间的绑定关系。

📍声明交换机和队列

@Configuration
public class RabbitMQConfig {

    // 声明队列
    @Bean
    public Queue queue1() {
        return new Queue("queue1", true); // 第二个参数表示是否持久化
    }

    @Bean
    public Queue queue2() {
        return new Queue("queue2", true);
    }

    // 声明交换机
    @Bean
    public DirectExchange directExchange() {
        return new DirectExchange("directExchange");
    }

    // 队列绑定到交换机
    @Bean
    public Binding binding1() {
        return BindingBuilder.bind(queue1()).to(directExchange()).with("routeKey1");
    }

    @Bean
    public Binding binding2() {
        return BindingBuilder.bind(queue2()).to(directExchange()).with("routeKey2");
    }
}

📍发送消息

在Spring Boot中,可以使用AmqpTemplate来发送消息。

@Autowired
private AmqpTemplate rabbitTemplate;

public void sendMessage(String routingKey, String message) {
    rabbitTemplate.convertAndSend("directExchange", routingKey, message);
}

📍接收消息

通过@RabbitListener注解来监听队列中的消息。

@Component
public class MessageListener {

    @RabbitListener(queues = "queue1")
    public void listenQueue1(String message) {
        System.out.println("Received from queue1: " + message);
    }

    @RabbitListener(queues = "queue2")
    public void listenQueue2(String message) {
        System.out.println("Received from queue2: " + message);
    }
}

🎈消息类型

RabbitMQ支持多种消息类型,主要通过交换机来区分。常见的交换机类型有:

  • Direct Exchange(直连型交换机):通过完全匹配路由键来分发消息。
  • Fanout Exchange(扇型交换机):将消息广播到所有绑定的队列。
  • Topic Exchange(主题交换机):通过模式匹配路由键来分发消息。

🎈消息确认

在RabbitMQ中,消息的确认分为发送确认和消费确认。

📍 发送确认

发送确认可以确保消息被成功发送到RabbitMQ服务器。在Spring Boot中,可以通过配置RabbitTemplate的confirmCallback来实现。

📍消费确认

消费确认可以确保消息被消费者正确消费。在Spring Boot中,可以通过设置@RabbitListener的acknowledgeMode为MANUAL来实现手动确认。

@RabbitListener(queues = "queue1", acknowledgeMode = "MANUAL")
public void listenQueue1(String message, Channel channel, Message message1) throws IOException {
    try{
        System.out.println("Received from queue1: " + message);
        // 业务处理逻辑

        // 消息处理完毕后手动确认
        channel.basicAck(message1.getMessageProperties().getDeliveryTag(), false);
    } catch (Exception e) {
        // 如果处理过程中出现异常,可以选择重新入队或拒绝消息
        // 重新入队
        // channel.basicNack(message1.getMessageProperties().getDeliveryTag(), false, true);
        // 拒绝消息
        // channel.basicReject(message1.getMessageProperties().getDeliveryTag(), false);
        
        // 这里仅做异常打印处理
        e.printStackTrace();
    }
}

🎈消息序列化

在RabbitMQ中,消息需要被序列化成字节流才能发送,接收方需要反序列化才能读取。Spring Boot的spring-boot-starter-amqp默认使用Java序列化,但这种方式不推荐用于生产环境,因为它会导致跨语言或跨版本的不兼容问题。可以使用JSON序列化方式替代,通过自定义MessageConverter来实现。

@Configuration
public class RabbitConfig {

    @Bean
    public MessageConverter jsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    // 确保自定义的MessageConverter被RabbitTemplate使用
    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, MessageConverter jsonMessageConverter) {
        RabbitTemplate template = new RabbitTemplate(connectionFactory);
        template.setMessageConverter(jsonMessageConverter);
        return template;
    }
}

🎈监控与管理

RabbitMQ提供了管理界面(RabbitMQ Management Plugin),通过它可以方便地查看交换机、队列、消息、连接等信息。确保在RabbitMQ服务器上启用了该插件。

🎈注意事项

确保RabbitMQ服务器运行正常,并且Spring Boot应用能够成功连接到RabbitMQ服务器。
处理好消息的确认机制,确保消息的可靠传输。
在生产环境中,考虑使用更健壮的序列化方式,如JSON。
注意RabbitMQ的性能调优,如调整队列的持久化策略、内存和磁盘的使用等。

🍚总结

Spring Boot与RabbitMQ的集成提供了强大的消息传递能力,可以方便地实现服务间的解耦和异步通信。通过合理的配置和使用,可以充分发挥RabbitMQ的优势,提升应用的性能和可靠性。
大功告成,撒花致谢🎆🎇🌟,关注我不迷路,带你起飞带你富。
作者:码海浮生

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值