news 2026/5/20 14:55:33

RabbitMQ 简单模式2026/5/19

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RabbitMQ 简单模式2026/5/19

我给你整理了零基础最快上手路线,从环境搭建 → 基础收发 → 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-management

2. 访问管理后台

浏览器打开: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("等待接收消息..."); } }

运行步骤

  1. 先运行消费者(保持启动)
  2. 再运行生产者
  3. 消费者控制台立刻收到消息 = 基础收发成功

第三阶段: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: guest

3. 配置队列 + 交换机(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); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 14:55:33

联想笔记本BIOS隐藏设置解锁:终极指南与完整教程

联想笔记本BIOS隐藏设置解锁&#xff1a;终极指南与完整教程 【免费下载链接】LEGION_Y7000Series_Insyde_Advanced_Settings_Tools 支持一键修改 Insyde BIOS 隐藏选项的小工具&#xff0c;例如关闭CFG LOCK、修改DVMT等等 项目地址: https://gitcode.com/gh_mirrors/le/LEG…

作者头像 李华
网站建设 2026/5/20 14:55:26

别再一个个画引脚了!用Excel+Cadence OrCAD快速搞定STM32芯片原理图库

用ExcelOrCAD高效构建STM32原理图库的工程实践 在嵌入式硬件开发中&#xff0c;原理图设计是连接芯片规格与实际PCB布局的关键桥梁。面对STM32这类具有复杂引脚配置的现代微控制器&#xff0c;传统手动绘制原理图符号的方式不仅耗时耗力&#xff0c;还容易引入人为错误。本文将…

作者头像 李华
网站建设 2026/5/20 14:55:20

如何彻底告别重复图片?AntiDupl.NET免费智能去重工具完全指南

如何彻底告别重复图片&#xff1f;AntiDupl.NET免费智能去重工具完全指南 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾经花费数小时整理电脑中的照片&#…

作者头像 李华
网站建设 2026/5/20 14:55:10

Verilog状态机设计:Moore与Mealy类型详解及三段式编码实践

1. 项目概述&#xff1a;从“状态”说起在数字电路设计的核心地带&#xff0c;Verilog 状态机&#xff08;Finite State Machine, FSM&#xff09;扮演着“大脑”的角色。它根据当前状态和输入信号&#xff0c;决定下一个状态和输出信号&#xff0c;从而控制整个系统的行为流。…

作者头像 李华
网站建设 2026/5/20 14:55:09

RK3566开发板GT911触屏驱动调试全记录:从i2cdetect到evtest的完整排错流程

RK3566开发板GT911触屏驱动深度调试实战指南 当RK3566开发板遇上GT911触控芯片&#xff0c;看似简单的硬件组合背后却暗藏玄机。我曾在一个工业HMI项目中连续三天被"能检测到设备但触控无响应"的问题困扰&#xff0c;最终发现是上拉电阻配置与内核事件上报机制的连环…

作者头像 李华
网站建设 2026/5/20 14:55:09

用Gemini做知识库搭建:从散乱文档到结构化FAQ的整理方法

很多团队都会遇到一个问题&#xff1a;资料不少&#xff0c;但真正要找答案时却总是翻不到。文档散在网盘、群聊、工单、会议纪要里&#xff0c;内容重复、版本混乱&#xff0c;新人上手慢&#xff0c;老员工也常常要反复解释。最近我在整理内部知识库时&#xff0c;会用 Gemin…

作者头像 李华