消息模型: 主题和队列有什么区别

理解消息队列:队列与主题的区别 如果你研究过多种消息队列产品,可能会发现每种消息队列都有自己的一套消息模型,像队列(Queue)、主题(Topic)或分区(Partition)这些名词概念在不同的消息队列模型中含义各异。这是因为没有统一的标准。尽管曾有国际组织尝试制定过消息相关的标准,如早期的 JMS 和 AMQP,但这些标准的进化跟不上消息队列的演进速度,最终被淘汰了。那么,什么是队列?什么是主题?它们之间有什么区别?为了彻底理解这些概念,我们需要从消息队列的演进说起。 阅读详情

消息模型的演进

1. 消息队列,最初架构上,就是一个严格FIFO的结构。

消费者 <——接收—— 队列 <——发送—— 生产者

消费者出队操作,删除数据,生产者入队操作。服务端存储消息的地方叫队列。

若有多个生产者,则多生产者自然顺序投递消息到队列。若有多消费者,他们之间则是竞争关系。

若希望消息给每个消费者,即每个消费者都要获取全量消息,比如订单给风控,客服等。

不能采用生产者根据消费者数量复制消息到多队列的做法,浪费存储资源且生产和消费就耦合了。

2.消息队列就演化出发布-订阅模型 (Publish-Describe Pattern)

                               

                                |————订阅——|

发布者 —发布—> 主题  —接收—>  订阅者

                                |      —接收—>  订阅者

                                |————订阅——|

在发布-订阅模型中,消息的发送方是发布者,接收方式订阅者,存储消息的容器叫主题。订阅可以认为是主题在消费时的逻辑副本。

队列模型和发布订阅模型历史上并存,二者最大区别在于一份消息能否被消费多次,现代大多是后者,因为后者功能上兼容前者。

RabbitMQ的消息模型

RabbitMQ是少数仍在使用队列模型的流行产品之一。通过额外的exchange模块去完成消息投放到多队列,以实现多消费者消费。

生产者把消息投递给exchange,exchange基于配置策略决定投递到哪些队列。

RocketMQ的消息模型

RocketMQ是标准的发布-订阅模型(发布者-主题-订阅者)。但是RocketMQ也有队列概念。

起源在于消息队列的生产&消费机制,所有消息队列都用的"请求-确认"机制。

具体就是生产者发送消息到服务端(broker),服务端收到消息后,将消息写入主题或者队列中,并给生产者发送确认的响应。生产者没收到ack就会重试。

消费者收到消息并完成业务逻辑后会返回给服务端消费成功的确认,服务端收到ack认为消息被成功消费,否则会给消费者重发消息直到收到消费端ack。

保证了可靠性,但是对于服务端消息存储容器来说(主题),其中一条被消费前,下一条不会被消费,一定是被有序消费。

因此不可能出现一个主题,一个订阅者可以多个消费端并行消费的情况(服务端不能同时投递)。

为了解决这个问题,每个主题内包含多队列,多队列实现多实例并行生产和消费。队列内有序,主题层面不保证有序。

RocketMQ中的订阅者是消费组Consumer Group。各消费组订阅主题,消费进度独立。

组内则包含多个消费者(提升消费能力),消费者是竞争主题内消息的关系,即一条消息被消费者1消费后组内其他消费者不会再收到。

由于是发布-订阅模型,因此不能消费后删除主题内的消息,而是为每个订阅者(消费组)记录了在主题内每个队列上的offset。

Kafka的消息模型

与rocktmq完全一致,包括生产消费过程中的确认机制。

唯一区别是rocketmq的队列在kafka中被称作分区partition。含义和功能没有区别。

小结

主题和队列对应两个不同的消息模型:队列模型和发布-订阅模型。本质上二者可以变化和拓展来互相替代。

常用消息队列,RabbitMQ是队列模型,但其可以实现发布-订阅模型;kafka和RMQ都是发布-订阅者模型。

本节所说全部都是业务模型,类比关系数据库,业务模型都是二维表,但实现模型MySQL是B+树、HBase是KV结构存储。Kafka和RMQ也一样实现会不同。

思考:如果允许消息空洞,不要求严格有序,如何提升主题的消费能力?

Emscripten安装(wasm编译) 5:配置对应环境变量--替换成自己对应的安装路径(2025最新的Emscripten工具链默认使用LLVM/WebAssembly标准工作流,java依赖已经移除了,所以以下java环境不配,需要使用java的手动添加即可---->emsdk install java-8-152-64bit。3:下载相应的依赖库---->emsdk install latest(我这里下的是最新的,如果有指定版本,把latest替换成版本号即可)6:测试是否成功---> emcc- v/em++ -v。 阅读详情

相关推荐

InSAR_ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场

ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场 ISCE软件做干涉只需要将数据准备好,并配置好insarApp.xml文件即可进行。 一、数据准备 1、SAR数据获取 本利中使用的数据为欧空局提供的sentinel-1A/B数据,可从阿拉斯加数据服务器上下载,具体下载方法可参考: 哨兵数据下载方法. 2、哨兵卫星轨道文件下载 哨兵数据处理除了需要SAR影像外,还需提供轨道参数文件,可从https://qc.sentinel1.eo.esa.int/aux_poeorb/下载。下载

weixin_42128764的博客 1万+

架构训练营-设计消息队列存储消息数据的表格

消息队列

xsh5161的博客 483

单细胞RNA测序数据分析与可视化:从基础原理到高级应用

单细胞RNA测序(scRNA-seq)技术通过解析单个细胞的基因表达谱,显著提升了我们对细胞异质性的理解。本文详细介绍了scRNA-seq数据分析的完整流程,包括数据预处理、质量控制、降维、聚类、差异表达分析、细胞类型注释、细胞周期分析、轨迹分析、RNA速率分析、基因集富集分析、细胞通讯分析、批次效应校正以及空间转录组学整合。文章还展示了scrna_toolkit包在简化分析流程和增强数据可视化方面的应用。通过这一工具,研究者可以更高效地处理单细胞数据,揭示复杂的生物学信息。未来,该工具将进一步整合多组学分

2301_80338712的博客 4129

游戏AI集成实战:基于DeepSeek API构建《光·遇》智能交互原型

大语言模型(LLM)作为人工智能领域的核心技术,通过深度学习海量文本数据,掌握了强大的自然语言理解和生成能力。其原理基于Transformer架构,通过自注意力机制捕捉长距离语义依赖,实现上下文感知的文本生成。这一技术价值在于能够将通用语言能力程序化调用,为各类应用注入智能交互潜力。在游戏开发领域,LLM的API接口为创建动态叙事、智能NPC和个性化体验提供了新范式。通过将游戏事件映射为结构化提示词,开发者可以构建能够理解游戏上下文并生成情境化响应的AI代理。本文以《光·遇》为应用场景,详细演示了如何通过F

weixin_30263277的博客 440

4D毫米波雷达

详解4D成像毫米波雷达

sangba2019的博客 2391

DTW Barycenter Averaging(DBA)——平均序列求法

DBA该算法是用来求序列数据集SS的一致序列(平均序列)。由Franc-ois Petitjean提出的。目前,该方法求得的平均序列是最准确的。 假设一元组为S={s1,s2,⋯,sn}S={s1,s2,\cdots,sn},当SS中的元素为实数时,很容易求的SS的平均值: avg=s1+s2+⋯+snn(1) avg = \dfrac{s1 +s2+\cdots+sn}{n} \qquad\q

光怪陆离 1万+

分布式开发之消息队列中,主题和队列有什么区别

总的来说,主题和队列是消息队列中的两个重要概念,主题用于将消息分类并标记,队列用于存储和管理已发布但尚未被订阅者处理的消息。例如,在一个名为“订单系统”的应用程序中,可能有多个主题,如“订单创建”、“订单更新”、“订单删除”等,发布者可以根据不同的主题发布不同的消息,订阅者可以根据自己感兴趣的主题来订阅相关的消息。例如,在一个名为“消息中心”的应用程序中,可能有多个队列,如“邮件队列”、“短信队列”、“推送队列”等,发布者可以将不同类型的消息发送到不同的队列中,订阅者从队列中获取相应的消息并进行处理。

xcksj666的博客 496

IgH EtherCAT 从入门到精通:第 4 章 网络设备驱动选型与配置

摘要:本章详细介绍了EtherCAT主站网络设备驱动的选型与配置。IgH EtherCAT Master提供Generic通用驱动和Native原生驱动两种方案:Generic驱动通过Linux Socket接口实现,兼容性强但实时性较差;Native驱动通过修改网卡驱动绕过内核协议栈,具有更低延迟和更小抖动。文章具体分析了e1000/e1000e/igb/igc等Intel网卡驱动以及r8169/8139too等Realtek驱动的配置方法,并提供了驱动选型建议。对于实时性要求高的场景,推荐使用Nativ

从事嵌入式linux android驱动开发,拥有全栈能力 304

消息与消息队列

    About Messages and Message Queues 基于windows的应用程序是事件驱动的。它们不进行明确的函数调用(比如调用C运行库)来获得输入。取而代之的是他们等待操作系统将输入传递给他们。 操作系统传递所有的输入给各种应用程序。每个window有一个函数叫做窗口过程,只要有输入操作系统就调用他们。窗口过程处理输入后,将控制返回给操作系统。详细资料请看窗口过程。

bluecrest的专栏 4080

C# Modbus协议全解析 万字长文|RTU/TCP/UDP完整实战(寄存器映射+多从站组网+NModbus4工业级代码)

你做C#工业上位机开发,Modbus协议是绕不开的终极核心,没有之一!Modbus是由施耐德在1979年发布的工业级串行通信协议,经过40余年的发展,已经成为工业自动化领域的通用标准协议—— 小到温湿度传感器、智能电表、小型PLC,大到变频器、伺服驱动器、DCS集散控制系统,99%的工业设备都原生支持Modbus协议(RTU/TCP二选一,多数全支持)。很多开发者觉得Modbus「知识点杂、协议分支多、组网难」,本质是只掌握了零散的读写代码,没吃透。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1063

手把手教你学Simulink——基于全桥 LLC 谐振变换器的双向 DC-DC 建模与仿真

本文详细介绍了基于Simulink的双向全桥LLC谐振变换器建模与仿真方法。内容涵盖:1)LLC谐振变换器背景与双向化挑战;2)系统架构设计及关键数学推导(FHA增益分析、双向控制逻辑);3)Simulink建模步骤(功率级搭建、PWM生成、同步整流实现);4)仿真结果分析(正向/反向工作验证、ZVS特性);5)工程实践建议(增益微调、代码生成与HIL测试)。通过手把手教学,帮助读者掌握950V↔48V双向LLC变换器的完整设计流程,实现高效率能量双向流动的同时保持软开关特性,适用于储能系统、车载充电等应用

MHD0815的博客 175

消息模型:主题和队列有什么区别?

这节课我们来学习消息队列中像队列、主题、分区等基础概念。这些基础的概念,就像我们学习一门编程语言中的基础语法一样,你只有搞清楚它们,才能进行后续的学习。如果你研究过超过一种消息队列产品,你可能已经发现,每种消息队列都有自己的一套消息模型,像队列(Queue)、主题(Topic)或是分区(Partition)这些名词概念,在每个消息队列模型中都会涉及一些,含义还不太一样。为什么出现这种情况呢?因为没有标准。曾经,也是有一些国际组织尝试制定过消息相关的标准,比如早期的JMS和AMQP。

qq_33240556的博客 881

Windows11配置WSL2支持代理上网

说起来本来这个功能我也不需要的,只是最近突然有个需求就顺便研究了下,WSL2默认的网络方式是NAT,即WSL2的网卡本身是虚拟网卡,通过以太网或WIFI的地址转换来上互联网,我试了下是不能直接走代理的,最近比较忙没具体研究,但是我用另一种方式实现了,下面介绍给需要的人。注意:这个方法只能是WIndows11系统,WIndows10系统上的WSL2缺少了一项功能导致不可用。1、方法总体没什么难度,NAT方式暂时没研究透,后续有时间再研究2、WIndows10系统不支持mirrored,暂时需要另辟蹊径。

jiexijihe945的博客 9590

03 | 消息模型:主题和队列有什么区别?

这节我们来学习消息队列中像队列、主题、分区等基础概念。这些基础的概念,就像我们学习一门编程语言中的基础语法一样,只有搞清楚它们,才能进行后续的学习。如果你研究过超过一种消息队列产品,你可能已经发现,每种消息队列都有自己的一套消息模型,像队列(Queue)、主题(Topic)或是分区(Partition)这些名词概念,在每个消息队列模型中都会涉及一些,含义还不太一样。为什么出现这种情况呢?因为没有标准。曾经,也是有一些国际组织尝试制定过消息相关的标准,比如早期的 JMS 和 AMQP。

qq_37756660的博客 1101

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

消息模型:主题和队列的区别

一、消息队列的演进 1、初始阶段 最初的消息队列,就是一个严格意义上的队列。队列是一种数据结构,先进先出,在消息入队出队过程中,保证这些消息严格有序。早期的消息队列就是按照“队列”的数据结构设计的。 队列模型: 生产者(Producer)发消息就是入队操作,消费者(Consumer)收消息就是出队也就是删除操作,服务端存放消息的容器自然就称为“队列”。 如果有多个...

weixin_30507481的博客 269

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

rocketmq订阅多个主题_消息模型:主题和队列有什么区别?

首发公众号:码农架构可以看到,技术圈的风向一直在变,大数据、云的热度已经在慢慢消退,现在当红的是 AI 和 IoT。这些火热的概念,它最终要从论文和 PPT 落地,变成真正能解决问题的系统,否则就是一个空中楼阁。那不变的是什么?(一些题外话的感触)主题和队列有什么区别?最初的消息队列,就是一个严格意义上的队列消费者之间实际上是竞争的关系,每个消费者只能收到队列中的一部分消息如果需要将一份消息数据分...

weixin_30551437的博客 2158

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

消息队列_03(消息模型: 主题和队列有什么区别)

消息模型: 主题和队列有什么区别 1.区别 队列是一种数据结构,有完整而严格的定义。 队列: 先进先出 注: 多个生产者发送信息为所有消息合集,顺序为生产者发送消息的自然顺序。 多个消费者时,任何一条消息只能被一个消费者收到 多个消费者需要共享一个消息,演化出“发布-订阅模型” 注:队列和发布-订阅模型最大区别就是一份消息数据能不能被消费多次的问题 2. RabbitMQ的消息模型 依然使用队...

qq_21486655的博客 513

消息队列 策略_消息模型:主题和队列有什么区别?

首发公众号:码农架构可以看到,技术圈的风向一直在变,大数据、云的热度已经在慢慢消退,现在当红的是 AI 和 IoT。这些火热的概念,它最终要从论文和 PPT 落地,变成真正能解决问题的系统,否则就是一个空中楼阁。那不变的是什么?(一些题外话的感触)主题和队列有什么区别?最初的消息队列,就是一个严格意义上的队列消费者之间实际上是竞争的关系,每个消费者只能收到队列中的一部分消息如果需要将一份消息数据分...

weixin_39626131的博客 136

系统学习消息队列分享(四) 消息模型:主题和队列有什么区别?

这节课我们来学习消息队列中像队列、主题、分区等基础概念。这些基础的概念,就像我们学习一门编程语言中的基础语法一样,你只有搞清楚它们,才能进行后续的学习。 如果你研究过超过一种消息队列产品,你可能已经发现,每种消息队列都有自己的一套消息模型,像队列(Queue)、主题(Topic)或是分区(Partition)这些名词概念,在每个消息队列模型中都会涉及一些,含义还不太一样。 为什么出现...

weixin_30586085的博客 512
上一篇: 01 | 为什么要消息队列
下一篇: 04 | 利用事务消息实现分布式事务
vectorX
博客等级 码龄11年 37粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值