消息队列

简介: 消息队列

正文


消息队列

什么是消息队列:消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。

为什么要使用消息队列?

首先,不同进程(process)之间传递消息时,两个进程之间耦合程度过高,改动一个进程,引发必须修改另一个进程,为了隔离这两个进程,在两进程间抽离出一层(一个模块),所有两进程之间传递的消息,都必须通过消息队列来传递,单独修改某一个进程,不会影响另一个。

其次,不同进程(process)之间传递消息时,为了实现标准化,将消息的格式规范化了,并且,某一个进程接受的消息太多,一下子无法处理完,并且也有先后顺序,必须对收到的消息进行排队,因此诞生了事实上的消息队列.

常见的消息队列有很多,接下来我们介绍第一种消息队列:RabbitMQ。

Rabbit MQ

一、简单队列

0.png

在上图的模型中,有以下概念:

P:生产者,也就是要发送消息的程序

C:消费者:消息的接受者,会一直等待消息到来。

queue:消息队列,图中红色部分。可以缓存消息;生产者向其中投递消息,消费者从其中取出消息

1.png

二、工作队列

工作队列或者竞争消费者模式

特点:每一个消费只能被一个消费者进行消费。

work queues与入门程序相比,多了一个消费端,两个消费端共同消费同一个队列中的消息,但是一个消息只能被一个消费者获取。

三、Publish/subscribe(交换机类型:Fanout,也称为广播)

2.png

生产者:

1) 声明Exchange,不再声明Queue

2) 发送消息到Exchange,不再发送到Queue

消费者使用不同的队列的名称,但是绑定在一个交换的节点上:

思考:

1、publish/subscribe与work queues有什么区别。

1)work queues不用定义交换机,而publish/subscribe需要定义交换机。

2)publish/subscribe的生产方是面向交换机发送消息,work queues的生产方是面向队列发送消息(底层使用默认交换机)。

3)publish/subscribe需要设置队列和交换机的绑定,work queues不需要设置,实际上work queues会将队列绑定到默认的交换机。

相同点:

所以两者实现的发布/订阅的效果是一样的,多个消费端监听同一个队列不会重复消费消息。

2、实际工作用 publish/subscribe还是work queues?

建议使用 publish/subscribe,发布订阅模式比工作队列模式更强大(也可以做到同一队列竞争),并且发布订阅模式可以指定自己专用的交换机。

四、Routing 路由模型(交换机类型:direct)

3.png

P:生产者,向Exchange发送消息,发送消息时,会指定一个routing key。

X:Exchange(交换机),接收生产者的消息,然后把消息递交给 与routing key完全匹配的队列

C1:消费者,其所在队列指定了需要routing key 为 error 的消息

C2:消费者,其所在队列指定了需要routing key 为 info、error、warning 的消息。

我们发送sms的RoutingKey,发现结果:只有指定短信的消费者1收到消息了

五、Topics 通配符模式(交换机类型:topics)

4.png

每个消费者监听自己的队列,并且设置带统配符的routingkey,生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列。

Routingkey一般都是有一个或者多个单词组成,多个单词之间以“.”分割,例如:inform.sms

#:匹配一个或多个词

*:匹配不多不少恰好1个词

根据匹配的规则寻找我们的消费者。

相关文章
|
9月前
|
人工智能 自然语言处理 Shell
OpenClaw(Clawdbot)配置阿里云百炼API教程,一篇图文全搞定
本教程详解OpenClaw(原Clawdbot/Moltbot)接入阿里云百炼API的完整流程:从一键安装、配置环境变量,到添加qwen3-max-2026-01-23等Qwen3系列模型。支持Coding Plan套餐,新客首月仅0.3元/天,图文并茂,开箱即用。(239字)
|
7月前
|
移动开发 前端开发 JavaScript
前端组件库——Wot Design Uni知识点大全(二)
教程来源 http://unbgv.cn Wot Design Uni 是基于 Vue3+TS 的跨平台 uni-app 组件库,提供 70+ 高质量组件。涵盖按钮、单元格、表单(支持链式校验)、弹窗、Toast、虚拟列表及带徽标的 Tabs 等,全面适配小程序/H5/APP,支持暗黑模式与国际化。
|
5月前
|
弹性计算 人工智能 小程序
阿里云服务器多少钱一年?2026 阿里云服务器最新配置价格参考
2026年阿里云服务器价格体系持续优化,覆盖轻量应用、通用计算、高性能GPU等全场景,新老用户均可享受稳定优惠与续费同价政策。价格核心取决于实例类型、配置规格、地域与付费模式,轻量服务器低至38元/年,ECS经济型实例99元/年起,企业级与GPU实例则根据算力需求定价,整体性价比与稳定性领先。本文全面梳理2026年阿里云服务器主流配置年付价格,覆盖个人、中小企业与AI开发场景,帮助用户精准核算上云成本。
857 0
|
5月前
|
传感器 存储 算法
40人 vs 150人:我们用真实课堂数据,画出了“闷热曲线”
本文通过在5种真实教室场景中开展2小时密闭监测实验,验证温湿度预警系统实效:VENTIL通风建议比MUGGY!闷热报警平均提前20–40分钟,证实趋势预警的有效性;同时发现人员密度比绝对人数更关键,大空间需引入体积系数优化阈值。数据驱动,直击工程落地痛点。
302 3
|
人工智能 API 开发工具
京东:对接白条API提供分期付款,降低消费门槛
本文详解京东白条API集成,涵盖技术原理、分步对接流程及Python代码实现,帮助开发者快速接入分期付款功能。通过API调用实现信用评估与分期计算,降低消费门槛,提升电商转化率。内容基于官方文档,确保准确可靠。
|
10月前
|
人工智能 边缘计算 调度
智启未来:2026年,AI从“技术工具”到“共生文明”的跨代元年
2026年,“会基础设施”范式跃迁开启人类与非生物智能共治的“第二个起源”。AI从工具升维为文明要素:技术迈入工业级确定性应用,能力下沉至个体;产业全链重构,制度启动动态合规、权责厘清与红利再分配;文明契约转向生态共生、意义赋予与思维共同体培育——未来在制度与共识之中。
546 1
|
存储 NoSQL Linux
深入理解Linux内核task_struct结构
深入理解Linux内核task_struct结构
|
SQL 分布式计算 Apache
Dataphin x Iceberg 开箱即用的数据湖治理解决方案
Apache Iceberg作为新一代开源数据湖表格式,具备ACID事务、时间旅行和高效Schema演化等能力。Dataphin已完成与Iceberg的深度集成,通过全链路适配与性能优化,为企业提供开箱即用的数据湖治理方案,涵盖数据源支持、离线与实时数据集成、数据研发等核心模块,助力构建现代化数据架构。
658 0
时间序列平稳性的双重假设检验:KPSS与ADF方法比较研究
时间序列分析中,确定序列的平稳性至关重要。本文介绍如何使用KPSS检验和Dickey-Fuller检验验证序列平稳性。KPSS假设数据非平稳,而Dickey-Fuller假设数据平稳。通过构造平稳(白噪声)和非平稳(随机游走)序列并进行检验,展示了两种方法的应用。KPSS适用于检测围绕趋势的平稳性,Dickey-Fuller则用于检验单位根。建议同时使用两者以确保结论可靠。
1001 4
时间序列平稳性的双重假设检验:KPSS与ADF方法比较研究