欢迎光临
我们一直在努力

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.direct direct 直连型,精确匹配
amq.topic topic 主题型,模糊匹配
amq.fanout fanout 广播型,发给所有队列
amq.headers headers 头匹配型(较少用)

你可以做的实验:

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

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


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

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

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

  • 填写队列名称(比如 my_queue)

  • 其他保持默认,点击 "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 的访问权限

    赞(0)
    未经允许不得转载:171主机测评 » 5分钟搞定RabbitMQ!Docker一键安装 + 核心概念图解
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址