消息队列的主要作用是异步处理 解耦服务 流量削峰 柔性事务
工作模式
| 模式名称 | 核心特点 | 生活实际例子 |
|---|---|---|
| 简单模式 | 1 生产者 → 1 队列 → 1 消费者 | 你给朋友单独发一条微信,一对一聊天 |
| 工作队列 | 1 生产者 → 1 队列 → 多消费者轮询 | 外卖订单:一个商家出餐,多个骑手抢单,一人一单 |
| 发布订阅 (Publish) | 广播,所有队列都收到 | 微信公众号推文:你一发,所有关注的人都收到 |
| 路由模式 (Routing) | 按固定路由键精准发送 | 短信分类:只给 VIP 用户发营销短信,普通用户不发 |
| 主题模式 (topic) | 通配符模糊匹配 | 新闻推送:只推「科技。手机」相关新闻给感兴趣的人 |
| RPC 模式 | 请求 + 响应,同步等待 | 你调用支付宝查余额,发请求→等返回结果 |
交换机类型
| 交换机类型 | 介绍 |
|---|---|
| direct(直连交换机) | 将队列绑定到交换机,根据routeKey发送到队列 |
| fanout(扇形交换机) | 不处理 routeKey,直接把消息转发到所有与其绑定的队列,属于广播模式。 |
| topic(主题交换机) | 根据 routeKey 按规则路由,# 匹配一个或多个词,* 匹配一个词,实现模糊路由。 |
| headers(头部交换机) | 不依赖 routeKey,根据消息 headers(Map 键值对)路由,可设置所有键值对匹配或任意一个匹配。 |
安装
Windows
可以看这一篇安装 RabbitMq详细安装教程_rabbitmq安装-CSDN博客
Docker
拉取镜像
docker pull rabbitmq:3.12-management
运行容器
# --name 参数:设置容器名称
# -p 参数:映射端口号,格式是“宿主机端口号:容器内端口号”。5672供客户端程序访问,15672供后台管理界面访问
# -v 参数:卷映射目录
# -e 参数:设置容器内的环境变量,这里我们设置了登录RabbitMQ管理后台的默认用户和密码
docker run -d \
--name rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
-v rabbitmq-plugin:/plugins \
-e RABBITMQ_DEFAULT_USER=guest \
-e RABBITMQ_DEFAULT_PASS=123456 \
rabbitmq:3.12.0-management
点击网站 账号 guest 密码 123456 http://127.0.0.1:15672
延迟交换机
官方下载页:www.rabbitmq.com/community-p…
确定卷映射目录
docker inspect rabbitmq
找到 "Source" 地址 将插件放进该目录下
# 登录进入容器内部
docker exec -it rabbitmq /bin/bash
# rabbitmq-plugins命令所在目录已经配置到$PATH环境变量中了,可以直接调用
# 设置开机自启
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
# 退出Docker容器
exit
# 重启Docker容器
docker restart rabbitmq
现在可以去网页管理去查看交换机已经多了一个。