惠州seo关键词,搜索引擎优化的主要策略,国内做网站公司排名,wordpress home index#x1f3ea; 场景#xff1a;一个外卖平台的后台系统
假设你开了一家在线外卖平台#xff1a;
饭店是消息的生产者#xff08;Producer#xff09;顾客是消息的消费者#xff08;Consumer#xff09;你开的外卖平台就是RabbitMQ消息系统 #x1f501; 第一部分… 场景一个外卖平台的后台系统
假设你开了一家在线外卖平台
饭店是消息的生产者Producer顾客是消息的消费者Consumer你开的外卖平台就是RabbitMQ消息系统 第一部分核心概念解析 1. 队列Queue—— 外卖存放柜
[ 队列就像小区门口的快递柜 ]
┌──────────────┐
│ 队列(Queue) │
│ ┌────────┐ │
│ │ 订单1 │ │--- 骑手放外卖
│ ├────────┤ │
│ │ 订单2 │ │
│ ├────────┤ │
│ │ 订单3 │ │--- 顾客取外卖
│ └────────┘ │
└──────────────┘作用临时存储消息外卖订单的容器特点 先进先出先放的订单先被处理可以持久化断电重启订单不丢失可设置容量限制防止爆单 2. 交换机Exchange—— 智能分拣中心
[ 交换机像外卖平台的调度中心 ]┌──────────────┐餐厅送来订单 ─│ 交换机 │─ 根据订单地址分发│ (Exchange) │└──────┬───────┘│┌──────────────▼──────────────┐│ 不同小区的快递柜 │├───────────┬─────────┬────────┤│ 浦东队列 │ 浦西队列 │ 松江队列│└───────────┴─────────┴────────┘作用接收消息并根据路由规则发给对应队列核心工作// 伪代码交换机的工作逻辑
void handleMessage(Message msg) {if (是广播消息) 发送给所有队列; // Fanout模式else if (匹配路由键) 发到指定队列; // Direct模式else if (模糊匹配) 发到多个队列; // Topic模式
}第二部分交换机类型和业务场景
1️⃣ 直连交换机Direct Exchange—— 精准配送
[ 定向配送场景 ]┌────────┐支付消息 ─│ 交换机 ├─── [支付队列] → 财务系统└───┬────┘└───── [订单队列] → 订单系统路由键order适用场景订单状态更新、支付通知代码绑定// 绑定队列到交换机并指定路由键
channel.queueBind(支付队列, 订单交换机, payment);
channel.queueBind(订单队列, 订单交换机, order);2️⃣ 扇形交换机Fanout Exchange—— 小区广播
[ 小区通知场景 ]┌─────────────┐物业通知─│ 广播交换机 ├─── [1号楼快递柜] └──────┬──────┘├─── [2号楼快递柜]└─── [3号楼快递柜]适用场景系统公告、群发消息特点无视路由键消息直接复制到所有绑定队列
3️⃣ 主题交换机Topic Exchange—— 智能分类
[ 根据标签定向推送 ]┌─────────┐新闻体育.NBA ─── │ 交换机 ├─ [体育队列] (*.NBA)└───┬─────┘└─── [热点队列] (热点.*) 路由键规则 * 匹配1个词如 天气.上海 → 天气.*# 匹配0或多个词如 新闻.体育.NBA → 新闻.# 场景新闻分类、日志分级收集 第三部分完整消息流转流程 饭店生产者 顾客消费者│ ▲│ 1.下订单 │ 6.吃外卖▼ │
┌─────────────────┐ ┌────────────┐
│ 外卖平台交换机 │ 3.放指定格子 │ 队列 │
│ (Exchange) ├─────┬─────── │ (Queue) │
└─────────────────┘ │ └────────────┘│ │2.通知调度中心 │ 4.查看待取外卖│ ┌▼───────────────────┐ │ 5.从柜子取外卖└─────┤ 绑定规则 ├─┘│ (queueBind路由规则)│└───────────────────┘对应代码示例
// 1. 饭店声明交换机 (类似开通分店渠道)
channel.exchangeDeclare(订单交换机, direct);// 2. 物业声明队列 (类似安装外卖柜)
channel.queueDeclare(浦东外卖柜, true, false, false, null);// 3. 建立绑定关系 (类似设置配送范围)
channel.queueBind(浦东外卖柜, 订单交换机, pudong);// 4. 饭店发送订单
channel.basicPublish(订单交换机, pudong, null, 鱼香肉丝饭.getBytes());// 5. 顾客监听自己的外卖柜
channel.basicConsume(浦东外卖柜, true, (consumerTag, delivery) - {System.out.println(收到外卖: new String(delivery.getBody()));
}, consumerTag - {});关键总结
概念现实比喻核心作用开发者注意事项交换机外卖调度中心决定消息去哪不存消息必须选择正确的交换机类型队列小区快递柜临时存消息要配置持久化/长度限制/消费者数量绑定外卖柜安装位置对应表建立交换机和队列映射关系路由键是消息分类的关键标签 ⚠️ 易错点提醒 很多初学者直接发消息到队列不经过交换机相当于饭店把外卖直接塞进某个快递柜 —— 可以运行但失去灵活性正规做法是通过交换机路由后续拓展才方便。 现在再回头看你的代码
// 创建队列相当于安装一个快递柜
channel.queueDeclare(订单队列, true, false, false, null); 就明白这个快递柜的特性
true耐用的柜子服务器重启订单还在false不独占多个骑手能同时投递false有人用时不会自动拆除null不需要特殊参数
要真正启用它还需要绑定到一个交换机就像是告诉调度中心这个柜子接收浦东地区的外卖订单。