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_USERadmin \ -e RABBITMQ_DEFAULT_PASSadmin123 \ rabbitmq:management如果是在Windows 的 CMD里改成一行去掉\cmd docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USERadmin -e RABBITMQ_DEFAULT_PASSadmin123 rabbitmq:management等待镜像下载完成会出现一长串容器ID。验证是否成功浏览器打开http://localhost:15672登录用户名admin密码admin123自己设置即可看到管理界面 →成功日常常用命令操作命令停止docker stop rabbitmq启动docker start rabbitmq重启docker restart rabbitmq删掉重来docker rm -f rabbitmq查看日志出错时用docker logs rabbitmqRabbitMQ 整体架构生产者 (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你创建的队列数量刚开始是 0Exchanges交换机数量有 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刚开始是空的没有队列。你需要创建一个队列点击 Add a new queue填写队列名称比如my_queue其他保持默认点击 Add queue创建成功后点击队列名称进入详情页可以看到Messages消息统计ready/未消费unacked/已取未确认Bindings这个队列绑定了哪些交换机Publish message可以手动发消息测试4. Admin管理页面 - 点击顶部 Admin这里管理用户、虚拟主机等标签页作用Users管理用户你创建的 admin 在这里Virtual Hosts虚拟主机隔离环境类似数据库的 schemaPolicies策略队列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 的访问权限