当前位置:   article > 正文

Spring Boot 集成 RabbitMQ(一)

Spring Boot 集成 RabbitMQ(一)

1、RabbitMQ 和 SpringBoot 的基础概念

RabbitMQ 是一个开源的 MQ (Message Queue,消息队列) 客户端服务器实现,遵循 AMQP(Advanced Message Queuing Protocol)协议。它允许应用发送消息并不直接传递到目标对象,而是通过交换器,队列,绑定的方式进行处理和转发,从而实现应用的解耦,异步并且能够确保可靠性。

Spring Boot 是由 Pivotal 团队提供的全新框架,用于简化 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义模板化的配置,简化了开发流程。

2、为何需要 SpringBoot 和 RabbitMQ,它们能带来什么好处 ?

  引入 Spring Boot 和 RabbitMQ 的优势主要体现在以下方面:

  • 解耦:不同的服务之间通过消息队列进行通信,降低了系统的耦合度。
  • 异步:消息生产者向队列中发送消息后,不需要同步等待消费者处理完成。
  • 增强可靠性:通过消息确认机制确保消息的成功投递。
  • 削峰填谷:在高并发情况下,消息生产者的生产能力可能远大于消费者的处理能力,消息队列可以作为一个缓冲,存储这些消息等待消费者消费。

3、SpringBoot 和 RabbitMQ 的工作原理介绍

 Spring Boot 通过自动配置、独立运行的方式,极大的简化了 Spring 应用的开发。在 Spring Boot 的核心设计中,存在四个重要的原则:

  • 开箱即用:Spring Boot 微服务的 jar 包可以直接运行
  • 提供种类丰富的“starter”依赖,简化 Maven 配置
  • 无需任何 XML 配置
  • 提供一系列大型项目中常见的非功能性特性,如安全、指标收集

RabbitMQ 则是典型的生产者-消费者模型,其工作原理包括三个重要的阶段:

  • 生产者生成消息:生产者产生数据后作为消息发送到 RabbitMQ。
  • 消息存储:RabbitMQ 将来自生产者的消息暂存在队列中,等待消费者来接收。
  • 消费者接收消息:一个或多个消费者连接到消息队列中,等待消息到来。当消息到达时,消费者从队列中获取消息并进行处理。

使用 Spring Boot 集成 RabbitMQ,我们可以轻易地创建出生产者和消费者,通过注解和配置的方式使用 RabbitMQ 的强大功能。

在 SpringBoot 中集成 RabbitMQ,您需要遵循以下步骤:

  1. 首先,您需要在您的计算机上安装 RabbitMQ。这就像在您的系统中安装任何软件一样。您可以从 RabbitMQ 官方网站 下载安装包进行安装。

  2. 然后,在 SpringBoot 项目中添加 RabbitMQ 的依赖。假设您正在使用 Maven,那么您需要在 pom.xml 文件中添加以下依赖:

xml

  1. <dependencies>
  2. <!-- 添加 Spring Boot 的 RabbitMQ starter -->
  3. <dependency>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-starter-amqp</artifactId>
  6. </dependency>
  7. </dependencies>

     3.接下来,配置 RabbitMQ。您需要在 application.properties 或者 application.yml 文件中添加 RabbitMQ 的相关配置,以下是一个样例配置:

  1. # RabbitMQ 的主机名或 IP 地址
  2. spring.rabbitmq.host=localhost
  3. # RabbitMQ的端口号,默认为5672
  4. spring.rabbitmq.port=5672
  5. # RabbitMQ 的用户名
  6. spring.rabbitmq.username=guest
  7. # RabbitMQ 的密码
  8. spring.rabbitmq.password=guest
  9. # RabbitMQ 的 virtual host,用于隔离连接、交换器和队列, 默认为"/"
  10. spring.rabbitmq.virtual-host=/

以上即是 SpringBoot 集成 RabbitMQ 的基本步骤。

需要注意的是,以下为您可能需要的一些额外配置选项:

  • spring.rabbitmq.publisher-confirm-type:消息发送到交换器Exchange后触发回调的类型,可以设置为:none、simple、correlated。
  • spring.rabbitmq.publisher-returns:当消息无法路由到队列时,是否返回给生产者,它需要和spring.rabbitmq.template.mandatory 一起使用。
  • spring.rabbitmq.template.mandatory:当消息无法路由到队列从而返回给生产者时,需要设置 mandatory 为 true,否则不会返回。
  • spring.rabbitmq.listener.simple.acknowledge-mode:消费者的确认模式,默认为自动确认,有三种:NONE、MANUAL、AUTO。

接下来,在项目中创建一个消息发送者(Producer):

java

  1. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. public class Producer {
  6. @Autowired
  7. private RabbitTemplate rabbitTemplate;
  8. public void sendMessage(String exchange, String routingKey, Object message){
  9. rabbitTemplate.convertAndSend(exchange, routingKey, message);
  10. }
  11. }

还需要创建一个消息接收者(Consumer):

java

  1. import org.springframework.amqp.rabbit.annotation.RabbitListener;
  2. import org.springframework.stereotype.Component;
  3. @Component
  4. public class Consumer {
  5. @RabbitListener(queues = "${your_queue}")
  6. public void receiveMessage(final String message) {
  7. System.out.println("Received message: " + message);
  8. }
  9. }

假设你已经接收到了航班动态的消息,这些消息将会被发送到RabbitMQ,然后由你的Spring Boot应用程序进行消费。

首先,确定你的RabbitMQ配置。在application.properties文件中:

properties

  1. spring.rabbitmq.host=your_host
  2. spring.rabbitmq.port=5672
  3. spring.rabbitmq.username=guest
  4. spring.rabbitmq.password=guest

设计一个类来接收航班的动态信息:

java

  1. public class FlightStatus {
  2. private String flightNumber; // 航班号
  3. private String status; // 航班状态
  4. // getters and setters
  5. }

接收和处理消息的类可能如下:

java

  1. import org.springframework.amqp.rabbit.annotation.RabbitListener;
  2. import org.springframework.stereotype.Component;
  3. @Component
  4. public class FlightStatusConsumer {
  5. @RabbitListener(queues = "${your_queue}")
  6. public void receiveFlightStatusUpdate(FlightStatus flightStatus) {
  7. // 处理航班状态更新
  8. System.out.println("Received flight status update: " + flightStatus);
  9. }
  10. }

在上面的代码中,receiveFlightStatusUpdate方法会监听你指定的队列,并消费消息。当一个新的FlightStatus消息到达时,此方法会被调用,并输出接收到的航班状态更新。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/376018
推荐阅读
相关标签
  

闽ICP备14008679号