Spring Boot集成RabbitMQ的使用

server/2024/10/21 5:52:08/

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

🤞Spring Boot集成RabbitMQ的使用🤞

    • 🎈引言
    • 🎈引入依赖
    • 🎈配置RabbitMQ
    • 🎈交换机、队列和绑定
      • 📍声明交换机和队列
      • 📍发送消息
      • 📍接收消息
    • 🎈消息类型
    • 🎈消息确认
      • 📍 发送确认
      • 📍消费确认
    • 🎈消息序列化
    • 🎈监控与管理
    • 🎈注意事项
    • 🍚总结

🎈引言

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.1port: 5672username: guestpassword: guest

🎈交换机、队列和绑定

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

📍声明交换机和队列

@Configuration
public class RabbitMQConfig {// 声明队列@Beanpublic Queue queue1() {return new Queue("queue1", true); // 第二个参数表示是否持久化}@Beanpublic Queue queue2() {return new Queue("queue2", true);}// 声明交换机@Beanpublic DirectExchange directExchange() {return new DirectExchange("directExchange");}// 队列绑定到交换机@Beanpublic Binding binding1() {return BindingBuilder.bind(queue1()).to(directExchange()).with("routeKey1");}@Beanpublic 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 {@Beanpublic MessageConverter jsonMessageConverter() {return new Jackson2JsonMessageConverter();}// 确保自定义的MessageConverter被RabbitTemplate使用@Beanpublic 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的优势,提升应用的性能和可靠性。
大功告成,撒花致谢🎆🎇🌟,关注我不迷路,带你起飞带你富。
作者:码海浮生


http://www.ppmy.cn/server/95829.html

相关文章

HTTP/2:让网络飞起来

文章目录 一、HTTP/2 的基本概念和背景二、HTTP/2 的主要特性和优势2.1 二进制帧2.2 多路复用2.3 头部压缩2.4 服务器推送 三、HTTP/2 的实现和部署四、HTTP/2 与现有技术的比较五、HTTP/2 与 Web 性能优化六、结束语&#xff1a;让 HTTP/2 助力你的 Web 开发 今天我们来聊聊一…

C# 组合CancellationTokenSource的使用

前言 在异步编程中&#xff0c;经常需要使用CancellationToken来取消任务的执行。 但是通常情况下&#xff0c;一个耗时任务还需要有超时机制。那个如何让一个任务既可以超市自动取消也可以手动取消&#xff1f; 组合CancellationTokenSourced的使用 //创建两个cts(一个手动…

【必看!】阿里云推出QWen-7B和QWen-7b-Chat,开放免费商用!

阿里云于8月3日宣布开源两款重要的大型模型——QWen-7B和QWen-7b-Chat。这两款模型的参数规模达到了令人瞩目的70亿&#xff0c;并且已经在Hugging Face和ModelScope平台上开放&#xff0c;并可免费商用。以下是相关链接&#xff1a; GitHub项目主页&#xff1a;https://githu…

MySQL索引及索引的优化策略

1.什么是索引&#xff1f; 索引是对数据库表中一列或多列的值进行排序的一种结构&#xff0c;使用索引可快速访问数据库表中的特定信息 2.为什么使用索引&#xff1a; 1.高效性&#xff1a;利用索引可以提高数据库的查询效率 2.唯一性&#xff1a;索引可以确保所查的数据的唯一…

高等数学精解【3】

文章目录 线性方程组齐次线性方程组高阶行列式 参考文献 线性方程组 齐次线性方程组 含有两个三元齐次线性方程的方程组 两个三元齐次线性方程通常指的是形如&#xff1a; a 1 x b 1 y c 1 z 0 a 2 x b 2 y c 2 z 0 a_1x b_1y c_1z 0 \\a_2x b_2y c_2z 0 a1​xb…

力扣1202.交换字符串中的元素

力扣1202.交换字符串中的元素 并查集 multiset&#xff1a;允许重复&#xff0c;并自动排序 class Solution {vector<int> vec;public:string smallestStringWithSwaps(string s, vector<vector<int>>& pairs) {unordered_map<int,multiset<cha…

函数实例讲解(三)

文章目录 常用的三个数学函数1、绝对值函数ABS2、取整数部分INT3、求余数函数MOD 求极值函数max、min1、Max2、Min 附加条件下求平均数1、AVERAGE2、AVERAGEIF3、AVERAGEIFS VLOOKUP与COLUMN1、VLOOKUP2、COLUMN 查找函数LOOKUP1、基础语法2、向量形式3、数组形式 常用的三个数…

什么是蠕虫病毒,如何防护蠕虫病毒?

蠕虫病毒&#xff08;Worm Virus&#xff09;是一种能够自我复制并传播的恶意软件&#xff0c;类似于计算机系统中的病毒&#xff0c;但蠕虫病毒有着更强大的传播能力和毁坏性。蠕虫病毒能够在网络中迅速传播、感染其他计算机和系统&#xff0c;给网络安全带来巨大威胁。蠕虫病…