如何使用Spring Boot整合RabbitMq实现高效的消息队列服务?
🏆本文收录于《Spring Boot从入门到精通》,专门攻坚指数提升,2023 年国内最系统+最强(更新中)。
本专栏致力打造最硬核Spring Boot 系列教程,从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
前言
随着应用的不断扩张和业务的不断升级,系统中的各种耦合度也不断增加,模块之间的调用也变得越来越复杂,这时候就需要用到消息队列来解耦。
在这篇文章中,我们将介绍如何使用 Spring Boot 和 RabbitMQ 来实现一个简单的消息队列服务。
摘要
本文主要涉及以下内容:
- RabbitMQ 简介及其使用场景
- Spring Boot 整合 RabbitMQ 的配置和使用
- 实现一个简单的消息队列服务
RabbitMQ 简介及其使用场景
RabbitMQ 是一个开源的消息队列系统,提供了先进的消息传递机制,支持多种消息传递协议,包括 AMQP、STOMP 和 MQTT 等。
RabbitMQ 的主要使用场景包括:
- 异步消息传递:RabbitMQ 可以实现异步消息传递,将消息发送到队列中,然后消息接收者可以在需要的时候从队列中接收消息。
- 负载均衡:RabbitMQ 支持多个消费者同时消费队列中的消息,并且可以实现负载均衡,根据不同的负载情况分配消息给不同的消费者。
- 消息订阅和发布:RabbitMQ 支持发布-订阅模式,可以将消息发送到交换机中,然后订阅该交换机的多个队列可以同时接收到该消息。
Spring Boot 整合 RabbitMQ 的配置和使用
添加依赖
首先,在 pom.xml
文件中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
该依赖将会自动引入 RabbitMQ 的客户端库和 Spring AMQP。
配置 RabbitMQ 连接信息
接下来,在 application.properties
文件中配置 RabbitMQ 连接信息:
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
创建消息发送者
在 RabbitMQ 中,要发送消息,首先需要创建一个连接到 RabbitMQ 服务器的 ConnectionFactory 对象,并使用该对象创建一个 Connection 对象,然后使用 Connection 对象创建一个 Channel 对象,最后通过 Channel 对象发送消息。
在 Spring Boot 中,可以使用 RabbitTemplate
来简化这个过程。我们可以创建一个发送消息的 Service 类,然后在该类中注入 RabbitTemplate
并使用 RabbitTemplate
来发送消息。
@Service
public class MessageSender {
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendMessage(String message) {
rabbitTemplate.convertAndSend("myExchange", "myRoutingKey", message);
}
}
在上面的代码中,我们注入了一个 RabbitTemplate
对象,并使用 convertAndSend
方法来发送消息到 myExchange
交换机,并将消息路由到 myRoutingKey
队列中。
创建消息接收者
接下来,我们需要创建一个消息接收者来处理从队列中接收到的消息。
Spring AMQP 提供了一个 @RabbitListener
注解,可以用来简化消息接收者的创建。我们可以创建一个接收消息的 Service 类,然后在该类的方法上添加 @RabbitListener
注解,指定要监听的队列即可。
@Service
public class MessageReceiver {
@RabbitListener(queues = "myQueue")
public void receiveMessage(String message) {
System.out.println("Received message: " + message);
}
}
在上面的代码中,我们创建了一个名为 receiveMessage
的方法,并在该方法上添加了 @RabbitListener
注解,指定要监听的队列为 myQueue
。
当有消息到达 myQueue
队列时,我们的 receiveMessage
方法就会被调用,并处理该消息。
实现一个简单的消息队列服务
接下来,我们将会使用 Spring Boot 和 RabbitMQ 来实现一个简单的消息队列服务。
创建 Exchange 和 Queue
首先,我们需要创建一个 Exchange 和一个 Queue,并将这两者绑定在一起。
在 RabbitMQ 中,Exchange 用于将消息路由到一个或多个队列中,而 Queue 则用于存储消息。当 Queue 绑定到一个 Exchange 上时,Exchange 就会将消息路由到这个 Queue 中。
在 Spring AMQP 中,可以使用 @Bean
注解来定义 Exchange 和 Queue 对象。
@Configuration
public class RabbitMQConfig {
@Bean
public Exchange myExchange() {
return new DirectExchange("myExchange");
}
@Bean
public Queue myQueue() {
return new Queue("myQueue");
}
@Bean
public Binding myBinding() {
return BindingBuilder.bind(myQueue()).to(myExchange()).with("myRoutingKey").noargs();
}
}
在上面的代码中,我们创建了一个名为 myExchange
的 DirectExchange 对象,一个名为 myQueue
的 Queue 对象,并使用 BindingBuilder
来将这两者绑定在一起,使用 myRoutingKey
作为路由键。
编写 Controller
接下来,我们创建一个 Controller 类,使用我们之前创建的 MessageSender
Service 来发送消息,并返回发送结果。
@RestController
@RequestMapping("/message")
public class MessageController {
@Autowired
private MessageSender messageSender;
@PostMapping
public String sendMessage(@RequestBody String message) {
messageSender.sendMessage(message);
return "Success";
}
}
在上面的代码中,我们创建了一个名为 MessageController
的 Controller 类,并在其上创建了一个 sendMessage
方法,在该方法中使用 MessageSender
Service 发送消息。
测试截图如下:
可以看到消息被成功接收到。
测试
启动应用后,我们可以使用 Postman 等工具向 http://localhost:8080/message
发送 POST 请求,来发送消息。
同时,我们还可以在 RabbitMQ 的管理页面中查看 myExchange
和 myQueue
的状态,以及是否有消息被发送和接收。
小结
在本文中,我们介绍了使用 Spring Boot 和 RabbitMQ 来实现消息队列服务的方法。通过配置 RabbitMQ 连接信息,创建 Exchange 和 Queue,以及使用 RabbitTemplate
和 @RabbitListener
来发送和接收消息,我们实现了一个简单的消息队列服务。
附录源码
如上涉及所有源码均已上传同步在「GitHub」,提供给同学们一对一参考学习,辅助你更迅速的掌握。
总结
本文介绍了如何使用 Spring Boot 和 RabbitMQ 来实现一个简单的消息队列服务。首先介绍了 RabbitMQ 的简介及其使用场景,然后介绍了 Spring Boot 整合 RabbitMQ 的配置和使用,包括添加依赖、配置 RabbitMQ 连接信息、创建消息发送者和消息接收者等。最后,通过创建 Exchange 和 Queue,以及编写 Controller 类来测试了消息队列服务的实现。
☀️建议/推荐你
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Spring Boot」,从入门到精通,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
📣关于我
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。
- 点赞
- 收藏
- 关注作者
评论(0)