如何使用Spring Boot整合RabbitMq实现高效的消息队列服务?
  HptQjPcX5vAL 2023年11月15日 70 0

在这里插入图片描述


🏆本文收录于《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 的管理页面中查看 myExchangemyQueue 的状态,以及是否有消息被发送和接收。

小结

在本文中,我们介绍了使用 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电子书籍、简历模板等海量资料。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
HptQjPcX5vAL