当前位置: 首页 > news >正文

RabbitMQ安装与介绍

文章目录

  • 一、docker安装
  • 二、RabbitMQ 六种模式
    • 1. 简单模式(Simple Queue)
    • 2. 工作队列模式 (Work Queue)
    • 3. 发布/订阅模式(Publish/Subscribe)
    • 4. 路由模式(Routing)
    • 5. 主题模式(Topics)
    • 6. RPC 模式(远程调用,不常用)
  • 三、RabbitMQ 交换机类型
    • 1. Fanout 交换机
    • 2. Direct 交换机
    • 3. Topic 交换机
    • 4. headers 交换机(不常用)
    • 5. x-local-random 交换机 (不常用)
  • 四、总结

参考文章:https://cloud.tencent.com/developer/article/1975744
参考视频: https://www.bilibili.com/video/BV1dX4y1V73G?spm_id_from=333.788.videopod.episodes&vd_source=4085910f7c5c4dddcc04446ebf3aed6b&p=18

一、docker安装

官网: https://www.rabbitmq.com/docs/download
创建文件夹
挂在数据目录

mkdir -p /usr/local/docker_data/rabbitmq-data

挂在配置文件rabbitmq.conf

mkdir -p /usr/local/docker_config

docker 命令

docker run -d --hostname my-rabbit -v /usr/local/docker_config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf  -v /usr/local/docker_data/rabbitmq-data:/var/lib/rabbitmq --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4-management

--hostname 必须指定

  • 如果不指定 --hostname,Docker 会随机生成一个主机名(比如 a7b3c9d1e2f),对应的 RabbitMQ 数据目录就会是 /usr/local/docker_data/rabbitmq-data/mnesia/rabbit@a7b3c9d1e2f。
    当容器重启或重建时,随机主机名会变,数据目录也会跟着变,原来的消息和配置就找不到了(相当于 “换了个数据文件夹”)。
  • 指定之后 此时 RabbitMQ 的数据目录会固定为 /usr/local/docker_data/rabbitmq-data/mnesia/rabbit@my-rabbit,即使容器重启,只要主机名不变,数据就能被正确读取。

二、RabbitMQ 六种模式

在这里插入图片描述

RabbitMQ 不论哪种模式推送消息都是: 生产者–>交换机–>队列–>消费者,简单和工作队列虽然图示虽然没有表明交换机的存在,但其使用的是默认交换机direct
在这里插入图片描述

1. 简单模式(Simple Queue)

适用场景

  • 单一生产者 → 单一队列 → 单一消费者
  • 最简单的消息传递,无路由逻辑
  • 虽然图上没有体现交换机,但使用的默认交换机direct,因为RabbitMQ消息必须走交换机
Producer
Queue
Consumer

关键特性

  • 队列自动创建,无需绑定交换器(实际隐式绑定到默认交换器 “”)
  • 消息默认轮询分发给消费者(若多个消费者监听同一队列)

2. 工作队列模式 (Work Queue)

适用场景

  • 生产者 → 单队列 → 多个消费者竞争消费
  • 任务分发、负载均衡(如耗时任务拆分)
  • 虽然图上没有体现交换机,但使用的默认交换机direct,因为RabbitMQ消息必须走交换机
Producer
Queue
Consumer1
Consumer2

关键特性

  • 消息默认轮询分发(Round-Robin)
  • 可配置公平分发(Prefetch Count=1)

与简单模式的区别

  • 消费者数量不同(工作队列允许多消费者)

3. 发布/订阅模式(Publish/Subscribe)

适用场景

  • 1条消息需要广播给多个消费者
  • 典型应用:日志广播、事件通知
Producer
Fanout Exchange
Queue1
Queue2
Consumer1
Consumer2

关键特性

  • 使用 Fanout 交换器(消息广播到所有绑定队列)
  • 队列需显式绑定到交换器:

4. 路由模式(Routing)

适用场景

  • 根据消息的 Routing Key 选择性投递
  • 典型应用:按错误级别过滤日志
error
info
Producer
Direct Exchange
Queue1
Queue2
Consumer1
Consumer2
Consumer3

关键特性

  • 使用 Direct 交换器
  • 绑定队列时指定 Routing Key
  • 其实也可以把路由模式的routing key 写成一样,就是发布订阅模式,

5. 主题模式(Topics)

适用场景

  • 基于 通配符 的复杂路由规则
  • 典型应用:消息分类(如:stock.us.nyse 或 weather.europe.fr)
*.critical
system.*
Producer
Topic Exchange
Queue1
Queue2
Consumer1
Consumer2

关键特性

  • 使用 Topic 交换器
  • Routing Key 支持通配符:
    匹配1个单词(如 a.* 匹配 a.b 但不匹配 a.b.c)
    匹配0或多个单词(如 a.# 匹配 a、a.b、a.b.c)

6. RPC 模式(远程调用,不常用)

适用场景

  • 通过消息队列实现 请求-响应 交互
  • 替代 HTTP 调用,实现解耦
请求
响应
Client
Request Queue
Server
Reply Queue

关键特性
使用 回调队列(Reply-To)和 Correlation ID 匹配请求

工作中最常用的模式就是 工作队列模式路由模式,其余都略显鸡肋。

三、RabbitMQ 交换机类型

标题二是根据模式进行分类,但究其根本其模式的区别是根据交换机的不同决定的,所以下面从交换机进行分类。
目前常用的有三种类型:fanout、 direct、topic
在这里插入图片描述

1. Fanout 交换机

  • Fanout 交换机相关的模式只有 发布/订阅模式(Publish/Subscribe)
  • 不会处理路由键,只要接收到消息,就广播到所有队列上。fanout类型转发消息是最快的。

2. Direct 交换机

  • 与 Direct 交换机相关的模式有:简单模式(Simple Queue)工作队列模式 (Work Queue)路由模式(Routing) 这三种模式。
  • Direct交换机 是在Fanout交换机的基础增加了过滤条件 routing key ,其不再像Fanout一样无条件广播给所有队列,而是广播给同样 绑定了routing key 的队列。

3. Topic 交换机

  • 与Topic交换机相关的模式只有主题模式(Topics)
  • Topic 交换机是在Direct 交换机的基础上把确定的过滤条件变为类似与正则表达式(仅仅是类似) 的表达式相关的过滤
    • 其将路由键和绑定键的字符串切分成单词,这些单词之间用.隔开。它会识别两个通配符: #* , #匹配0个或多个单词,*匹配一个单词

4. headers 交换机(不常用)

headers 交换机同样也是添加过滤条件,不过其不再是在routing key上过滤,而是在队列参数上进行过滤,比如headers交换机设置了 参数x=1 的过滤条件,队列中的参数有x=1的才会接收到消息

5. x-local-random 交换机 (不常用)

暂无

四、总结

自己总结,仅供参考。

综上所述,入门RabbitMQ其实很简单,两个重要组件,交换机和队列,至于其模式都是根据交换机的延申处理的,交换机常用就三种,fanout、direct、topic ,而这三种的区别也仅仅是过滤级别的区别,fanout无过滤(广播),direct 路由key过滤(确定的字符串),topic 类似于正则的过滤。也类似于nginx的server中正则路径一样,/ /prod-api/ /*api/

或者也可以这样理解,RabbitMQ 的核心就是消息在 交换机 消息队列 之间的传递(在这块队列就可以直接与消费者抽象为一体)交换机只能有一个,队列可以1个或多个,所以问题就可以归纳为交换机和队列之间的关系。

  1. 在只有1个交换机,1个队列时 ,可以分为 简单模式(一个消费者)和工作队列模式(多个消费者,队列默认轮询分发消息)
  2. 在有1个交换机,多个队列时, 此时交换机给队列分发消息
    是没有条件全部广播 (fanout 交换机, 发布订阅模式)?
    还是根据过滤条件指定过滤具体字符串发给特定的交换机(direct 交换机,路由模式)?
    还是根据过滤条件类似于正则匹配发给特定的交换机 (topic 交换机,主题模式)?

拓展说明

error
info
Producer
Direct Exchange
Queue1
Queue2
Consumer1
Consumer2
Consumer3

上图为路由模式,在路由模式下,Consumer1 和 Consumer3 订阅了同一个队列 Queue1,它们会以轮询的方式接收 Queue1 中的消息,但不会同时收到同一条消息。这种机制有助于实现消息的负载均衡和并行处理。

也就是说

  • 交换机–》队列 是根据交换机类型来分发消息的。
  • 队列–》消费者 是轮询分发消息的。(默认轮询,可以更改为 公平分发 或 优先级队列)
http://www.lryc.cn/news/606160.html

相关文章:

  • Disruptor高性能基石:Sequence并发优化解析
  • 去重、top_n()、pull()、格式化
  • 数据结构第4问:什么是栈?
  • BR/EDR PHY帧结构及其具体内容
  • 51c自动驾驶~合集12
  • python基础语法3,组合数据类型(简单易上手的python语法教学)(课后习题)
  • 从0到1了解热部署
  • 一天两道力扣(7)
  • 力扣 hot100 Day61
  • 银河麒麟桌面操作系统:自定义截图快捷键操作指南
  • 机器人学和自动化领域中的路径规划方法
  • 解决Git升级后出现的问题
  • 国产芯+单北斗防爆终端:W5-D防爆智能手机,助力工业安全通信升级
  • 将开发的软件安装到手机:环境配置、android studio设置、命令行操作
  • ClickHouse vs PostgreSQL:数据分析领域的王者之争,谁更胜一筹?
  • 2683. 相邻值的按位异或
  • USRP捕获手机/路由器数据传输信号波形(中)
  • DeepCompare文件深度对比软件:智能差异分析与可视化功能深度解析
  • visual studio 安装总结
  • 搭建文件共享服务器samba————附带详细步骤
  • Kubernetes (K8s) 部署Doris
  • Redis过期策略
  • 【嵌入式电机控制#23】BLDC:开环运动控制框架
  • 设计模式:命令模式 Command
  • 法国声学智慧 ,音响品牌SK (SINGKING AUDIO) 重构专业音频边界
  • Web开发-PHP应用原生语法全局变量数据接受身份验证变量覆盖任意上传(代码审计案例)
  • HighgoDB查询慢SQL和阻塞SQL
  • 电商项目_性能优化_高并发缓存一致性
  • 当过滤条件不符合最左前缀时,如何有效利用索引? | OceanBase SQL 优化实践
  • 0731 IO进程基础