百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

什么是消息队列(Message Queue)?

ccwgpt 2025-02-24 15:24 45 浏览 0 评论

在计算机科学中,消息队列和邮箱是用于进程间通信或同一进程内的线程间通信的软件工程组件。他们使用一个队列来传播消息——传递控制或者内容。群体传播系统提供类似的功能。

概述

消息队列提供一个异步通信协议,这意味着该消息的发送者和接收者不需要在同一时间与消息队列进行交互。消息被放入队列保存,直到接收方处理他们。消息队列对于一条消息中传输的数据大小有显示或隐式的限制,这样队列中才能保持良好的的消息数量。

消息队列的很多功能由内部实现:在操作系统或应用程序内部。这种队列的存在只为运行于该系统。

其他实现允许不同的计算机系统之间传递消息,可能会连接多个应用程序和多个操作系统。这些消息队列系统通常提供增强的弹性功能,以确保系统故障时消息不会“丢失”。这种消息队列软件(也被称为面向消息中间件)的商业实现的例子包括IBM的WebSphere MQ(MQ系列)和Oracle高级队列(AQ)。Java标准中的Java消息服务(JMS),有几个专有软件和免费软件实现。

各种实现有专有软件,提供消息队列服务,开源软件,或者是基于硬件

专有选项拥有最长的历史,包括从一开始的消息队列产品,如IBM的WebSphere MQ(MQ系列 ),还有依赖特定操作系统的,如Microsoft消息队列 。

消息队列服务选项,如StormMQ或IronIO。

有很多开放源码选项的消息中间件系统,包括JBoss Messaging,JORAM,Apache ActiveMQ,Sun Open Message Queue,Apache Qpid,[8] RabbitMQ,Beanstalk’d,Tarantool和HTTPSQS [9]

除了开源系统,基于硬件的消息中间件的存在有供应商如Solace系统 ,Sonoa / Apigee和Tervela通过硅或硅/软件数据通路提供队列。

大多数RTOS鼓励使用消息队列作为主要的IPC或线程间通信机制,如VxWorks和QNX操作系统。导致消息传递与CPU调度紧密集成的主要原因是RTOS实时应用程序的可用性。早期的商用的RTOS例子鼓励消息队列基于线程间通信,包括VRTX和pSOS +,可追溯至20世纪80年代初。

使用

在典型消息队列实现中,系统管理员安装配置现成的消息队列软件(队列管理器或中介),并定义一个命名的消息队列。或者注册一个消息队列服务 。

然后,应用程序注册一个软件例程,来“监听”放入队列的消息。

后续的应用程序可以连接到队列并转移其中的消息。

队列管理器软件存储消息,直到接收应用程序连接后调用注册的软件例程。然后,接收应用程序以适当的方式处理该消息。

通常有许多选项作为消息传递的精确语义,包括:

  • 持久性– 消息可能被保存在内存中,写入到磁盘,或甚至提交到DBMS,如果可靠性要求表明了更加资源密集型的解决方案。

  • 安全策略– 哪些应用程序可以访问这些消息?

  • 消息清理策略– 队列或消息应当有存活时间

  • 消息过滤– 一些系统支持过滤数据,因此,订阅者只能看到匹配预定义兴趣标准的消息

  • 交付策略– 我们是不是应该保证消息传递至少一次,或不超过一次?

  • 路由策略– 在一个有许多队列服务器的系统中,哪些服务器应该收到一条消息或一队列的消息?

  • 批量策略– 是否立即将消息传送?还是说系统应该稍等,并尝试一次传递多条消息?

  • 排队标准– 什么时候应当考虑消息“入队”?什么时候队列有了?或者,何时它被转发到至少一个远程队列?或所有队列?

  • 已收通知– 发布者可能需要知道,何时部分或全部订阅者收到了消息。

这些因素都是要考虑的,会显著影响到传输语义,系统的可靠性,系统效率。

标准和协议

从历史来看,消息队列使用了专有的,封闭的协议,以约束不同的操作系统或编程语言在异构环境中交互的能力。

让消息队列更加广泛认知的早期尝试是Sun Microsystem的JMS规范,它提供了仅供Java的客户端API。允许Java开发人员切换消息队列提供者,类似开发人员使用SQL数据库的方式。在实践中,多样化的消息队列技术和方案,并不总是像应有的那般实用。

最近,已经出现了三个标准,使得消息队列开放而广泛:

  • 高级消息队列协议

  • MQTT

  • 面向流文本的消息传递协议

这些全都处于标准化和采纳的不同阶段。他们运转在HTTP的同一层次。

一些专有实现,也使用HTTP来提供消息队列,如Amazon的SQS。

这是因为它总能使用请求-响应语义经由同步协议来分层异步行为(这正是消息队列需要的)。然而这种情况下,这种实现受到底层协议限制,而且可能无法给传递的消息提供必须的完整保真度或设置选项。

同步与异步

许多同步操作的通信协议更加众所周知。HTTP协议 – 用于万维网和Web服务 – 提供了一个明显的例子,用户发送一个网页请求,然后等待答复。

然而,存在这样的情况,此时同步的行为是不恰当的。例如,AJAX( 异步JavaScript和XML)可用于异步发送文本或XML消息,来用更多的相关信息更新一个网页的一部分。谷歌在他的谷歌建议(自动填充)中使用了这种途径,搜索功能将用户输入的部分查询发送到谷歌的服务器,并返回一个列表,包含用户会录入的可能的完整查询。这个列表是在用户录入时异步更新的。

其他异步的例子存在于事件通知系统和发布/订阅系统。

  • 一个应用程序可能需要通知别人事件发生了,但并不需要等待响应。

  • 在发布/订阅系统中,应用程序“发布”信息,任意数量的客户端阅读

在上面的例子中,让信息发送者等待是不合理的,例如,如果其中一个接收方已崩溃。

应用程序不必仅作同步或异步 。交互的应用程序可能需要立即回应部分请求(如告诉客户,销售请求已被接受,正在处理库存调货预约),但是也许队列中的其他部分(如完成费用计算,将数据转发到中心记账系统,还有调用各种其它服务)会过一会才完成。

在这些情况下,用一个子系统进行消息排队(或可选择广播消息系统)可有助于提高整体系统的行为。

参考

Advanced Message Queuing Protocol

Amazon Simple Queue Service

Beanstalk’d

Gearman

IBM WebSphere Message Broker

IBM WebSphere MQ

Java Message Service

Message-oriented middleware, (category)

Microsoft Message Queuing(known colloquially as MSMQ)

Microsoft Azure Services Platform, particularly Azure storage queues andAppFabricService Bus

RabbitMQ

StormMQ,an example of Message Queuing as a Service

?MQ

引用

  • ^ Win32 system message queues. “About Messages and Message Queues“. Windows User Interface. Microsoft Developer Network. Retrieved April 21, 2010.

  • ^ Linux and POSIX message queues.Overview of POSIX message queues at linux.die.net

  • ^ Using Linux Message Queues. [1] at www.civilized.com

  • ^ For example, the MSMQ product. “Message Queuing (MSMQ)“. Network Communication. Microsoft Developer Network. Retrieved May 9, 2009.

  • ^Apache Qpid Project, an implementation of AMQP.

  • ^ HTTPSQS, an message queue based on HTTP GET/POST protocol.

作者:zeroflamy

End.

相关推荐

自己动手写Android数据库框架_android开发数据库搭建

http://blog.csdn.net/feiduclear_up/article/details/50557590推荐理由关于Android数据库操作,由于每次都要自己写数据库操作,每次还得去...

谷歌开源大模型评测工具LMEval,打通谷歌、OpenAI、Anthropic

智东西编译|金碧辉编辑|程茜智东西5月28日消息,据科技媒体TheDecoder5月26日报道,当天,谷歌正式发布开源大模型评测框架LMEval,支持对GPT-4o、Claude3.7...

工信部:着力推动大模型算法、框架等基础性原创性的技术突破

工信部新闻发言人今日在发布会上表示,下一步,我们将坚持突出重点领域,大力推动制造业数字化转型,推动人工智能创新应用。主要从以下四个方面着力。一是夯实人工智能技术底座。通过科技创新重大项目,着力推动大模...

乒乓反复纠结“框架不稳定”的三个小误区

很多球友由于对框架的认知不清晰,往往会把“框架不稳定”当成一种心理负担,从而影响学球进度,其典型状态就是训练中有模有样,一旦进入实战,就像被捆住了手脚。通过训练和学习,结合“基本功打卡群”球友们交流发...

前AMD、英特尔显卡架构师Raja再战GPU,号称要全面重构堆栈

IT之家8月5日消息,知名GPU架构师拉贾科杜里(RajaKoduri)此前曾先后在AMD和英特尔的显卡部门担任要职。而在今日,由Raja创立的GPU软件与IP初创企...

三种必须掌握的嵌入式开发程序架构

前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。我相...

怪不得别人3秒就知道软考案例怎么做能50+

软考高级统一合格标准必须三科都达到45分,案例分析也一直是考生头疼的一门,但是掌握到得分点,案例能不能50+还不是你们说了算吗?今天就结合架构案例考点,分享实用的备考攻略~一、吃透考点,搭建知识框架从...

UML统一建模常用图有哪些,各自的作用是什么?一篇文章彻底讲透

10万+爆款解析:9大UML图实战案例,小白也能秒懂!为什么需要UML?UML(统一建模语言)是软件开发的“蓝图”,用图形化语言描述系统结构、行为和交互,让复杂需求一目了然。它能:降低沟通成本避...

勒索软件转向云原生架构,直指备份基础设施

勒索软件组织和其他网络犯罪分子正越来越多地将目标对准基于云的备份系统,对久已确立的灾难恢复方法构成了挑战。谷歌安全研究人员在一份关于云安全威胁演变的报告中警告称,随着攻击者不断改进数据窃取、身份泄露和...

ConceptDraw DIAGRAM:释放创意,绘就高效办公新未来

在当今数字化时代,可视化工具已成为提升工作效率和激发创意的关键。ConceptDrawDIAGRAM,作为一款世界顶级的商业绘图软件,凭借其强大的功能和用户友好的界面,正逐渐成为众多专业人士的首选绘...

APP 制作界面设计教程:一步到位_app界面设计模板一套

想让APP界面设计高效落地,无需繁琐流程,掌握“框架搭建—细节填充—体验优化”三步法,即可一步到位完成专业级设计。黄金框架搭建是基础。采用“三三制布局”:将屏幕横向三等分,纵向保留三...

MCP 的工作原理:关键组件_mcp部件

以下是MCP架构的关键组件:MCP主机:像ClaudeDesktop、GitHubCopilot或旅行助手这样的AI智能体,它们希望通过MCP协议访问工具、资源等。MCP主机会...

软件架构_软件架构师工资一般多少

软件架构师自身需要是程序员,并且必须一直坚持做一线程序员。软件架构应该是能力最强的一群程序员,他们通常会在自身承接编程任务的同时,逐渐引导整个团队向一个能够最大化生产力的系统设计方向前进。软件系统的架...

不知不觉将手机字体调大!老花眼是因为“老了吗”?

现在不管是联系、交友,还是购物,都离不开手机。中老年人使用手机的时间也在逐渐加长,刷抖音、看短视频、发朋友圈……看手机的同时,人们也不得不面对“视力危机”——老花眼,习惯眯眼看、凑近看、瞪眼看,不少人...

8000通用汉字学习系列讲座(第046讲)

[表声母字]加(续)[从声汉字]伽茄泇迦枷痂袈笳嘉驾架咖贺瘸(计14字)嘉[正音]标准音读jiā。[辨形]上下结构,十四画。会意形声字,从壴从加,加也表声。注:从壴,字义与鼓乐有关;从加,字义与...

取消回复欢迎 发表评论: