我给你整理了零基础最快上手路线,从环境搭建 → 基础收发 → 7 大工作模式 → Spring Boot 整合 → 微服务实战,全程可直接复制代码运行,不绕弯、不讲废话,最快 1 小时学会核心用法。
一、先搞懂:RabbitMQ 是什么(1 分钟)
- 消息队列:用来异步、解耦、削峰
- 核心角色:生产者(发消息)、队列(存消息)、消费者(收消息)
- 语言:Erlang,我们不用学,直接装环境就行
第一阶段:环境搭建(5 分钟搞定)
1. 安装 Erlang + RabbitMQ
最简单方式:Docker 一键安装(推荐零基础)打开电脑终端,直接运行:
bash
运行
# 拉取镜像 docker pull rabbitmq:3-management # 启动容器(网页控制台 + 服务端口) docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management2. 访问管理后台
浏览器打开:http://localhost:15672
默认账号 / 密码:guest / guest
看到管理界面 = 环境搭建成功!
第二阶段:基础消息收发(10 分钟)
1. 核心概念
- 生产者:发送消息
- 队列:存储消息
- 消费者:监听并消费消息
2. Java 原生客户端测试(不依赖框架)
第一步:引入依赖
xml
<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.18.0</version> </dependency>第二步:生产者(发消息)
java
运行
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class Producer { private final static String QUEUE_NAME = "hello_queue"; public static void main(String[] args) throws Exception { // 1. 创建连接工厂 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setUsername("guest"); factory.setPassword("guest"); // 2. 创建连接 + 通道 try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) { // 3. 声明队列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 4. 发送消息 String message = "Hello RabbitMQ!"; channel.basicPublish("", QUEUE_NAME, null, message.getBytes()); System.out.println("发送消息:" + message); } } }第三步:消费者(收消息)
java
运行
import com.rabbitmq.client.*; public class Consumer { private final static String QUEUE_NAME = "hello_queue"; public static void main(String[] args) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setUsername("guest"); factory.setPassword("guest"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 监听消息 DeliverCallback callback = (consumerTag, delivery) -> { String message = new String(delivery.getBody()); System.out.println("收到消息:" + message); }; channel.basicConsume(QUEUE_NAME, true, callback, consumerTag -> {}); System.out.println("等待接收消息..."); } }运行步骤
- 先运行消费者(保持启动)
- 再运行生产者
- 消费者控制台立刻收到消息 = 基础收发成功
第三阶段:RabbitMQ 7 大工作模式(30 分钟)
只记最常用 4 个,面试 + 工作 90% 场景够用
1. 简单模式(上面 hello world 就是)
- 一个生产者 → 一个队列 → 一个消费者
2. 工作队列模式(Work Queue)
- 一个生产者 → 一个队列 →多个消费者
- 消息轮询分发(平均分配)
- 用途:异步处理任务、减轻压力
3. 发布订阅模式(Fanout)
- 交换机类型:fanout(广播)
- 一条消息 → 所有绑定队列都收到
- 用途:通知、日志同步
4. 路由模式(Direct)
- 交换机根据路由键精准发送
- 用途:订单支付成功、短信通知、邮件通知
5. 主题模式(Topic)
- 通配符路由:
#匹配多个,*匹配一个 - 用途:灵活分类消息
第四阶段:Spring Boot 整合 RabbitMQ(20 分钟)
企业 100% 用这种方式
1. 引入依赖
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: guest3. 配置队列 + 交换机(Config)
java
运行
import org.springframework.amqp.core.Queue; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitConfig { // 声明队列 @Bean public Queue bootQueue() { return new Queue("boot_queue", true); } }4. 生产者(发送消息)
java
运行
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController public class ProducerController { @Resource private RabbitTemplate rabbitTemplate; @GetMapping("/send") public String send() { String msg = "Spring Boot 发送消息"; rabbitTemplate.convertAndSend("boot_queue", msg); return "发送成功"; } }5. 消费者(监听消息)
java
运行
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component public class BootConsumer { // 监听队列 @RabbitListener(queues = "boot_queue") public void receive(String msg) { System.out.println("Spring Boot 收到:" + msg); } }测试
启动项目 → 访问:http://localhost:8080/send
控制台立刻打印消息 = Spring Boot 整合成功!
第五阶段:微服务基础组件实践(15 分钟)
微服务里 RabbitMQ 最常用 3 大场景:
1. 异步解耦(最核心)
- 订单服务 → 发送消息 → MQ
- 库存服务、物流服务、短信服务 → 监听消费
- 不互相等待,不阻塞
2. 流量削峰
- 秒杀场景:请求先进入队列,再慢慢处理
- 防止服务器被冲垮
3. 最终一致性(分布式事务)
- 本地消息表 + RabbitMQ 保证消息不丢
- 适合支付、订单等场景
微服务最简实践代码
订单服务(生产者):
java
运行
rabbitTemplate.convertAndSend("order_exchange", "order.success", "订单1001已支付");库存服务(消费者):
java
运行
@RabbitListener(queues = "stock_queue") public void reduceStock(String msg) { System.out.println("扣减库存,消息:" + msg); }短信服务:
java
运行
@RabbitListener(queues = "sms_queue") public void sendSms(String msg) { System.out.println("发送短信,消息:" + msg); }