java——spring boot集成RabbitMQ——windows本地安装和运行

文章介绍了消息队列的基本概念,包括生产者和消费者的模型,以及使用消息队列的三大好处:解耦、异步处理和削峰。接着,重点讨论了RabbitMQ的特点,如可靠性、灵活的消息分发策略和集群支持。最后,文章提供了在Win10上安装RabbitMQ的详细步骤,包括安装Erlang、RabbitMQ服务端,启用管理插件并验证安装。

思维导图

image-20230202192414940

 

 

一、什么是消息队列

消息指的是两个应用间传递的数据。数据的类型有很多种形式,可能只包含文本字符串,也可能包含嵌入对象。

“消息队列(Message Queue)”是在消息的传输过程中保存消息的容器。

在消息队列中,通常有生产者和消费者两个角色。

生产者只负责发送数据到消息队列,谁从消息队列中取出数据处理,他不管。

消费者只负责从消息队列中取出数据处理,他不管这是谁发送的数据。

image-20230202200059101

 

 

二、为什么使用消息队列

主要有三个作用:

  • 解耦。如图所示。假设有系统B、C、D都需要系统A的数据,于是系统A调用三个方法发送数据到B、C、D。这时,系统D不需要了,那就需要在系统A把相关的代码删掉。假设这时有个新的系统E需要数据,这时系统A又要增加调用系统E的代码。为了降低这种强耦合,就可以使用MQ,系统A只需要把数据发送到MQ,其他系统如果需要数据,则从MQ中获取即可。

image-20230202200111824

  • 异步。如图所示。一个客户端请求发送进来,系统A会调用系统B、C、D三个系统,同步请求的话,响应时间就是系统A、B、C、D的总和,也就是800ms。如果使用MQ,系统A发送数据到MQ,然后就可以返回响应给客户端,不需要再等待系统B、C、D的响应,可以大大地提高性能。对于一些非必要的业务,比如发送短信,发送邮件等等,就可以采用MQ。

image-20230202200119032

  • 削峰。如图所示。这其实是MQ一个很重要的应用。假设系统A在某一段时间请求数暴增,有5000个请求发送过来,系统A这时就会发送5000条SQL进入MySQL进行执行,MySQL对于如此庞大的请求当然处理不过来,MySQL就会崩溃,导致系统瘫痪。如果使用MQ,系统A不再是直接发送SQL到数据库,而是把数据发送到MQ,MQ短时间积压数据是可以接受的,然后由消费者每次拉取2000条进行处理,防止在请求峰值时期大量的请求直接发送到MySQL导致系统崩溃。

image-20230202200128469

 

 

 

三、RabbitMQ的特点

RabbitMQ是一款使用Erlang语言开发的,实现AMQP(高级消息队列协议)的开源消息中间件。

首先要知道一些RabbitMQ的特点,官网open in new window可查:

  • 可靠性。支持持久化,传输确认,发布确认等保证了MQ的可靠性。
  • 灵活的分发消息策略。这应该是RabbitMQ的一大特点。在消息进入MQ前由Exchange(交换机)进行路由消息。分发消息策略有:简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式
  • 支持集群。多台RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。
  • 多种协议。RabbitMQ支持多种消息队列协议,比如 STOMP、MQTT 等等。
  • 支持多种语言客户端。RabbitMQ几乎支持所有常用编程语言,包括 Java、.NET、Ruby 等等。
  • 可视化管理界面。RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker。
  • 插件机制。RabbitMQ提供了许多插件,可以通过插件进行扩展,也可以编写自己的插件。

 

 

 

四、RabbitMQ初の体验

 

4.1 安装RabbitMQ (Win10系统)

由于只是学习需要,所以安装在win10系统,就懒得开虚拟机。如果用Linux系统安装的话,我建议用Docker拉一个RabbitMQ的镜像下来,这样会方便一点。

 

 

4.1.1 安装erLang语言,配置环境变量

首先到erlang官网open in new window下载win10版安装包。

image-20230202200144725

下载完之后,就得到这个东西:

image-20230202200153583

接着双击安装,一直点next(下一步)就行了,安装完之后,配置环境变量。

image-20230202200216501

image-20230202200233799

使用cmd命令,输入 erl -version 验证:

image-20230202200251598

 

 

 

4.1.2 安装RabbitMQ服务端

在RabbitMQ的gitHub项目open in new window中,下载window版本的服务端安装包。

image-20230202200324346

下载后,就得到这个东西:

image-20230202200333064

接着到双击安装,一直点下一步安装即可,安装完成后,找到安装目录:

image-20230202200348889

在此目录下打开cmd命令,输入rabbitmq-plugins enable rabbitmq_management命令安装管理页面的插件:

image-20230202200400671

然后双击rabbitmq-server.bat启动脚本,然后打开服务管理可以看到RabbitMQ正在运行:

image-20230202200409636

这时,打开浏览器输入http://localhost:15672,账号密码默认是:guest/guestopen in new window

image-20230202200424224

到这一步,安装就大功告成了!

image-20230202200437213

 

 

 

 

 

 

 

 用户名:guest   ;  密码:guest

<think>嗯,用户现在想了解Spring BootRabbitMQ的关系及结合使用。从对话历史看,用户之前已经询问过Spring Boot的定义,现在转向具体技术集成场景,说明ta可能正在实际开发中遇到消息队列的需求。 用户提供的引用材料很有价值:引用[1]概括了二者结合的优势(异步通信/解耦/削峰),引用[2]描述了典型应用场景,引用[3][4]则给出具体配置步骤。需要特别注意用户强调的"关系""结合使用"这两个关键词。 在组织回答时,应该先阐明技术栈定位:Spring Boot开发框架,RabbitMQ是消息中间件,二者通过Spring AMQP项目连接。核心价值要突出"简化"——传统RabbitMQ集成需要手动创建ConnectionFactory、声明队列等,而Spring Boot的自动配置starter依赖解决了这个问题。 技术实现部分需要分层说明:基础配置(yml)、依赖管理(starter-amqp)、生产者(RabbitTemplate)、消费者(@RabbitListener)。用户引用里提到的application.yml配置示例很典型,可以优化展示格式。另外用户似乎关注实际步骤,所以把引用[4]说的三步扩展成五步更清晰。 生产级应用要强调Spring Boot的特性支持,比如健康检查对RabbitMQ的监控集成,这点在引用中没有明说但很重要。测试环节用户可能容易忽略,补充模拟消息的工具方法会实用。 最后提出的三个衍生问题有递进性:原理(自动配置)满足技术好奇心,场景匹配帮助决策,死信处理则是实际开发高频痛点。特别要注意死信队列这个点,因为引用材料完全没提及,但却是生产环境必备方案。 </think>Spring BootRabbitMQ 的结合为分布式系统提供了高效、可靠的**异步通信解决方案**,二者的协作显著简化了消息队列的集成使用流程。以下是关键关系的解析及实践指南: --- ### 一、核心关系解析 | **组件** | **角色** | **Spring Boot 的优化作用** | |----------------|----------------------------------------|------------------------------------------| | **RabbitMQ** | 消息中间件(Message Broker) | 提供消息存储、路由、传输能力 | | **Spring Boot**| 开发框架 | 通过 **Spring AMQP** 封装 RabbitMQ 复杂操作 | | **协作价值** | 实现系统解耦、流量削峰、异步任务处理 | **自动化配置** + **简化 API**(如 `RabbitTemplate`)[^1][^4] | > 传统 vs Spring Boot 集成对比: > - 传统方式需手动配置 `ConnectionFactory`、声明队列/交换机、绑定路由 > - **Spring Boot 仅需三步**:添加依赖 → 配置参数 → 直接调用 API[^4] --- ### 二、Spring Boot 集成 RabbitMQ 的关键步骤 #### 1. **添加依赖** (`pom.xml`) ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` #### 2. **配置连接参数** (`application.yml`) ```yaml spring: rabbitmq: host: localhost port: 5672 username: guest password: guest virtual-host: / # 虚拟主机(可选) ``` #### 3. **生产者发送消息** 使用 `RabbitTemplate` 发送消息到指定队列: ```java @Autowired private RabbitTemplate rabbitTemplate; public void sendOrderMessage(String orderId) { // 发送到名为 "order_queue" 的队列 rabbitTemplate.convertAndSend("order_queue", orderId); } ``` #### 4. **消费者接收消息** 通过 `@RabbitListener` 注解监听队列: ```java @Component public class OrderMessageConsumer { @RabbitListener(queues = "order_queue") public void processOrder(String orderId) { System.out.println("处理订单: " + orderId); // 执行业务逻辑 } } ``` #### 5. **声明队列与交换机(可选)** 若需自定义队列/交换机,可在配置类中声明: ```java @Configuration public class RabbitConfig { @Bean public Queue orderQueue() { return new Queue("order_queue", true); // 持久化队列 } @Bean public DirectExchange orderExchange() { return new DirectExchange("order_exchange"); } @Bean public Binding binding(Queue orderQueue, DirectExchange orderExchange) { return BindingBuilder.bind(orderQueue).to(orderExchange).with("order.routing"); } } ``` --- ### 三、典型应用场景 1. **系统解耦** 订单系统 → 消息队列 → 库存系统/物流系统,避免服务间直接调用[^2]。 2. **流量削峰** 突发请求写入队列,消费者按处理能力消费(如秒杀系统)。 3. **异步任务** 耗时操作(如邮件发送、文件处理)异步执行,提升响应速度。 4. **数据同步** 微服务间通过消息同步关键数据(如用户信息变更)。 --- ### 四、Spring Boot 的增强特性 1. **自动配置** 根据依赖自动创建 `RabbitTemplate`、`ConnectionFactory` 等组件。 2. **健康检查** 端点 `/actuator/health` 自动监控 RabbitMQ 连接状态。 3. **消息确认机制** 支持生产者确认(Publisher Confirm)消费者确认(ACK/NACK)。 4. **重试机制** 通过 `@Retryable` 注解实现消费失败自动重试。 --- ### 五、操作示例:发送对象消息 ```java // 发送自定义对象(需序列化) rabbitTemplate.convertAndSend("order_queue", new Order("123", 99.9)); // 消费者接收 @RabbitListener(queues = "order_queue") public void handleOrder(Order order) { // 直接反序列化为Order对象 } ``` > 需确保 `Order` 类实现 `Serializable` 接口。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值