news 2026/6/3 1:00:28

5分钟搞定RabbitMQ!Docker一键安装 + 核心概念图解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5分钟搞定RabbitMQ!Docker一键安装 + 核心概念图解

🔥个人主页:代码不加冰(欢迎来访)
🎬作者简介:java后端学习者
❄️个人专栏:LeetCode刷题日记 , 苍穹外卖日记,SSM框架深入,JavaWeb,
命运的结局尽可永在,不屈的挑战却不可须臾或缺!

前言:

大家好我是代码不加冰,前面我们刚初步认识了Docker,这里就用Docker来尝试安装一下RabbitMQ,并同时初步认识一下RabbitMQ。


前提:已经装好 Docker Desktop

没装的话先装:

  • Windows/macOS:上 docker.com 下载 Docker Desktop 安装

  • Linux (Ubuntu)sudo apt install docker.io

安装完后重启电脑,确保 Docker 图标在任务栏/菜单栏跑着。

如果有不清楚的,可以看我前面的文章,有具体步骤:Windows 保姆级 Docker 安装教程(WSL2 版),一篇入门docker


安装 RabbitMQ

打开终端(CMD、PowerShell 或 Terminal),执行:

bash docker run -d \ --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=admin123 \ rabbitmq:management

如果是在Windows 的 CMD里,改成一行(去掉\):

cmd docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin123 rabbitmq:management

等待镜像下载完成(会出现一长串容器ID)。


验证是否成功

浏览器打开:http://localhost:15672

登录:

  • 用户名:admin

  • 密码:admin123

自己设置即可

看到管理界面 →成功


日常常用命令
操作命令
停止docker stop rabbitmq
启动docker start rabbitmq
重启docker restart rabbitmq
删掉重来docker rm -f rabbitmq
查看日志(出错时用)docker logs rabbitmq

RabbitMQ 整体架构

生产者 (Producer) RabbitMQ 服务器 消费者 (Consumer) │ │ │ │ ┌─────────────────────────────────────┐ │ │ │ Exchange (交换机) │ │ ├──────┼──────────→│ │ │ │ │ │ 根据 Routing Key │ │ │ │ │ 路由到 Queue │ │ │ │ └───────────┬─────────────┘ │ │ │ │ │ │ │ ┌───────────▼─────────────┐ │ │ │ │ Queue (队列) │ │ │ │ │ 存储消息 │ │ │ │ └───────────┬─────────────┘ │ │ │ │ │ │ │ ├──────────────────────┤ │ │ │ 消费消息 │ │ │ │ │ │ └─────────────────────────────────────────────────┘

核心概念
概念英文通俗解释生活类比
生产者Producer发送消息的程序寄快递的人
消费者Consumer接收消息的程序收快递的人
队列Queue存消息的"信箱"快递柜
交换机Exchange决定消息去哪儿的"分拣员"快递分拣中心
绑定Binding交换机和队列之间的"路线图"分拣规则

管理界面

访问http://localhost:15672,登录后,我们逐个区域看:

1. Overview(概览)页面 - 登录后默认看到的

┌───────────────────────────────────────────────────────┐ │ RabbitMQ Management │ ├─────────────────────────────────────────────────────────┤ │ Overview | Connections | Channels | Exchanges │ │ Queues | Admin │ ├─────────────────────────────────────────────────────────┤ │ │ │ Totals: │ │ ┌─────────────┬─────────────┬─────────────┐ │ │ │ Queues: 0 │ Exchanges:7 │ Connections:0│ │ │ │ (你创建的) │ (系统自带的) │ (当前连接) │ │ │ └─────────────┴─────────────┴─────────────┘ │ │ │ │ Node: rabbit@... (你的节点) │ │ │ └─────────────────────────────────────────────────────────┘

重点看

  • Queues:你创建的队列数量(刚开始是 0)

  • Exchanges:交换机数量(有 7 个默认的)

  • Connections:当前有多少客户端连接


2. Exchanges(交换机)页面 - 点击顶部 "Exchanges"

这里显示所有交换机,重点关注这几个默认的:

交换机名称类型作用
(AMQP default)direct默认交换机,直接用队列名发消息
amq.directdirect直连型,精确匹配
amq.topictopic主题型,模糊匹配
amq.fanoutfanout广播型,发给所有队列
amq.headersheaders头匹配型(较少用)

你可以做的实验

  • 点击amq.fanout→ 查看绑定(Bindings)

  • 点击 "Add a new exchange" 创建一个自定义交换机


3. Queues(队列)页面 - 点击顶部 "Queues"

刚开始是空的(没有队列)。你需要:

  1. 创建一个队列:点击 "Add a new queue"

  2. 填写队列名称(比如my_queue

  3. 其他保持默认,点击 "Add queue"

创建成功后,点击队列名称进入详情页,可以看到:

  • Messages:消息统计(ready/未消费,unacked/已取未确认)

  • Bindings:这个队列绑定了哪些交换机

  • Publish message:可以手动发消息测试


4. Admin(管理)页面 - 点击顶部 "Admin"

这里管理用户、虚拟主机等:

标签页作用
Users管理用户(你创建的 admin 在这里)
Virtual Hosts虚拟主机(隔离环境,类似数据库的 schema)
Policies策略(队列TTL、镜像等)
Limits系统限制(就是刚才你问的 file descriptor 那里)

一个完整的消息流程

假设你有一个队列叫my_queue,一个交换机叫my_exchange

步骤 1: 创建队列 Queues → Add a new queue → 名称: my_queue



步骤 2: 创建交换机 Exchanges → Add a new exchange → 名称: my_exchange, 类型: direct
步骤 3: 绑定(告诉交换机,消息送到哪个队列) 点击 my_exchange → Bindings → To queue: my_queue, Routing key: my_key → Bind


步骤 4: 发送消息 点击 my_exchange → Publish message → Routing key: my_key, Payload: Hello World → Publish
步骤 5: 查看消息 点击 Queues → my_queue → 可以看到 "Messages ready: 1"


步骤 6: 消费消息 在 my_queue 详情页 → Get messages → Get


消息的生命周期

text 生产者发送消息 │ ▼ 到达交换机 ──→ 没有匹配队列 → 消息丢失(根据配置可能被返回) │ │ 有绑定 ▼ 进入队列 │ ├──→ 等待消费者(状态: ready) │ ▼ 消费者取走消息(状态: unacked) │ ├──→ 消费者返回 ack(确认)→ 消息删除 │ └──→ 消费者失联/不 ack → 消息重新入队

数据隔离的测试:

我们先添加一个user

可以发现这里是没有可以访问的虚拟主机

然后我们重新登,用我们刚创建的user

在这里我们不能改变消息的

这里能看到队列也是我们设置的权限足够高,超级管理员的权限。

我们创建自己的虚拟主机:

在这里我们可以进行一系列操作,实现数据隔离

  • 不同 vhost 之间完全隔离,互不可见

  • 同一个名字的队列可以在不同 vhost 中同时存在

  • 用户可以被授予不同 vhost 的访问权限

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 0:56:13

Python量化投资终极指南:如何免费获取通达信实时行情数据

Python量化投资终极指南:如何免费获取通达信实时行情数据 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在量化投资的世界里,数据就是一切。没有准确、及时的数据&#xf…

作者头像 李华
网站建设 2026/6/3 0:53:26

外部导线用接线端子正常工作非正常工作

外部导线用接线端子(安规、工艺释义)1、字面意思设备机身外部进线/出线,不能直接把电线剥皮拧在PCB铜皮上,必须使用接线端子(端子座、接线柱、弹簧端子、栅栏端子)固定外接电源线。举例:适配器、…

作者头像 李华
网站建设 2026/6/3 0:50:47

进阶利器与最佳实践——成为团队里的 Git 高手

摘要:前面的几篇已经覆盖了 Git 90% 的日常操作。但在实际项目中,你还会遇到这些需求:发布版本时需要打个标签;临时切换任务却不想提交半成品代码;引用了外部库想锁定版本;想在推送前自动运行测试……这些都…

作者头像 李华
网站建设 2026/6/3 0:43:43

JWT鉴权机制与安全存储方案深度解析

JWT鉴权机制与安全存储方案深度解析JWT鉴权的安全边界 JWT(JSON Web Token)已经成为现代Web应用中最主流的身份认证方案之一。它的无状态特性让服务端无需维护会话信息,非常适合分布式架构和微服务场景。然而,JWT的安全边界在哪里…

作者头像 李华
网站建设 2026/6/3 0:42:17

Mermaid Live Editor:5分钟学会用代码绘制专业图表

Mermaid Live Editor:5分钟学会用代码绘制专业图表 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor …

作者头像 李华
网站建设 2026/6/3 0:42:16

从Keil MDK仿真到嘉立创EDA:软硬件联调,一个完整物联网项目的调试闭环

从Keil MDK仿真到嘉立创EDA:构建物联网项目的软硬件调试闭环调试嵌入式系统就像在黑暗森林中寻找萤火虫——软件和硬件的故障往往交织在一起,让人难以分辨问题究竟出在哪一端。作为一名经历过无数次深夜调试的嵌入式工程师,我深知这种痛苦。本…

作者头像 李华