首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >消息队列

消息队列

作者头像
用户1750537
发布2025-08-29 08:56:26
发布2025-08-29 08:56:26
1180
举报

消息队列中间件、分布式面向对象中间件和事务处理中间件等。 消息队列服务是一种松耦合的分布式应用集成形式。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。这种模式下,发送和接收是异步的,发送者无需等待;二者的生命周期未必相同;发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;一对多通信:对于一个消息可以有多个接收者。

消息队列中间件最重要的功能是及时提供可靠的消息通信手段。为了能够完成消息的可靠传输,一般情况下,使用队列的方式进行消息管理,也就是说,能常在进行数据传输时,将数据按照用户定义的大小,拆分成若干消息放入消息队列,按照同步或异步的通信方式发送或者接收消息。 在当前消息系统工程中,出于功能、安全性、可靠性等方面的考虑,大量使用路由器、交换机、防火墙的网络设备,或使用集群、双机热备份等网络技术,网络结构日趋复杂。为了能够满足网络使用的要求,中间件产品通常可以采用多种方式进行部署,做到系统之间构筑一对一、一对多、多对一、多对多的树型网络结构,使系统配置和管理大为简化,同时也能满足系统数据传输的要求。 消息队列是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。其实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(Message),然后把它保存至一个系统公用空间的消息队列(MessageQueue)中;本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理。

消息队列服务系统即是把消息中间件技术应用于时间中一种位于平台和应用之间的服务程序。消息队列实在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台及其上,也可以分布于相连的网络空间中的任一位置。其实现原理是:消息的发送者把自己想要发送的信息放入一个容器中,然后把它保存在一个系统供用空间的消息队列中,本地或者是异地的消息接受程序再从该队列中取出发给它的消息进行处理。 在消息传递机制中,有两个重要的概念。一个是消息,一个是队列。消息是由通信的双方所需要传递的信息,它可以使各式各样的媒体,如文本,声音,图像等等。消息的最终的理解凡是,为消息传递双方事先商定,这样做的好处是,一是相当于对数据进行了简单的加密,二则是采用自己定义的格式可以节省通信的传递量。消息可以含有发送和接收者的标识,这样只有之不定期的用户才能看到职传递给他的信息和返回是否操作成功的回执。消息也可以含有时间戳,以便于接受方对某些与时间相关的应用进行处理。消息还可以含有到期时间,递,把消息放置于内存中,而不是放于物理磁盘上,以获取较高的处理能力;可恢复模式在传送过程的每一步骤中,都把消息写入物理磁盘中,以得到较好的故障恢复能力。消息队列可以放置在发送方,接收方所在的机器上,也可以单独放置在另外一台机器上。正是由于消息队列在放置方式上的灵活性,形成了消息传送机制的可靠性。当保存消息队列的机器发生故障而重新启动后,以可恢复的模式发送的消息可以恢复到故障发生之前的状态,而以快递方式发送的消息则丢失。另一方面,再用消息传递机制,发送方必须再担心接收方是否启动,是否发生故障等。采用消息队列技术的好处是:由于是异步通信,无论是发送方还是接受方都不用等待对方返回成功信息,就可以执行余下的代码,因而大大的提高了事务处理的能力。在信息传送过程中,信息发送机制具有一定功能的故障恢复能力;消息传送机制使得消息通信的双方具有不同的物理平台成为可能。

消息队列分为用户创建队列和系统队列,用户队列分为: 1)“公共队列”在整个可传送消息的“消息队列”网络中复制并传输,并且有可能由网络连接的所有站点访问。 2)“专用队列”不在整个网络中发布。相反,它们仅在所驻留的本地计算机上可用。专用队列只能由知道队列的完整路径名或标签的应用程序访问。 3)“管理队列”包含确认在给定“消息队列”网络中发送的消息回执的消息。制定希望MessageQueue组件使用的管理队列。 4)“响应队列”包含目标应用程序接受到消息时放回给发送应用程序的响应消息。制定希望MessageQueue组件使用的响应队列。 系统队列分为: 1)“日记队列”可选的存储发送消息的副本和从队列中溢出的消息副本。 2)“死信队列”存储无法传送或已过期的消息的副本。 3)“专用系统队列”是一系列存储系统治性消息处理操作所需的管理和通知消息的专用队列。

消息中间件在以后的开发中,将会向传输的消息大小和容量不受限制的方向发展。可以使用拆分和组装技术,实现整个系统队所传输的消息大小和容量不受限制。为了消息传输的可靠性能足够高,消息中间件将会使用消息多级回执技术,使消息可以回滚和可以返回,当消息从队列中被提取的同时其暂存缓存区中,此时即使断电,也可以保证消息的可靠传输而不被延迟和消失。 消息队列服务系统处理高并发服务是又一技术难点,服务器由原来处理5个并发任务到16并发任务,再到2000并发任务一直不断的改进。使用一部I/O机制,处理好进程与线程的正确关系是消息队列服务系统又一技术关键所在。以COM形式提供MQClientAPI是目前消息队列服务系统的需求。API面对过程函数的组件接口在使用过程中会带来一定的麻烦,使用COM面向对象的组件接口比使用API组件接口有很大的好处。可以减少定义函数,附加附件,制定优先级等一系列繁琐的过程。

MB消息路由和数据转换。 消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行–它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。

在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段。为了管理需要共享的信息,对应用提供公共的信息交换机制是重要的。

设计分布式应用的方法主要有:远程过程调用(PRC)–分布式计算环境(DCE)的基础标准成分之一;对象事务监控(OTM)–基于CORBA的面向对象工业标准与事务处理(TP)监控技术的组合;消息队列(MessageQueue)–构造分布式应用的松耦合方法。 MQ中有几个很重要的组件:队列管理器(QueueManager)、队列(Queue)和通道(Channel) 创建队列管理器   crtmqm ?q QMgrName   -q是指创建缺省的队列管理器   删除队列管理器   dltmqm QmgrName   启动队列管理器   strmqm QmgrName   如果是启动默认的队列管理器,可以不带其名字   停止队列管理器   endmqm QmgrName 受控停止   endmqm ?i QmgrName 立即停止   endmqm ?p QmgrName 强制停止   显示队列管理器   dspmq ?m QmgrName   运行MQSeries命令   runmqsc QmgrName   如果是默认队列管理器,可以不带其名字   往队列中放消息   amqsput QName QmgrName   如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字   从队列中取出消息   amqsget QName QmgrName   如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字   启动通道   runmqchl ?c ChlName ?m QmgrName   启动侦听   runmqlsr ?t TYPE ?p PORT ?m QMgrName   停止侦听   endmqlsr -m QmgrName   MQSeries命令   定义死信队列   DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE   设定队列管理器的死信队列   ALTER QMGR DEADQ(QNAME)   定义本地队列   DEFINE QL(QNAME) REPLACE   定义别名队列   DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)   远程队列定义   DEFINE QREMOTE(QRNAME) +   RNAME(AAA) RQMNAME(QMGRNAME) +   XMITQ(QTNAME)   定义模型队列   DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)   定义本地传输队列   DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) +   INITQ(SYSTEM.CHANNEL.INITQ)+   PROCESS(PROCESSNAME) REPLACE   创建进程定义   DEFINE PROCESS(PRONAME) +   DESCR(‘STRING’)+   APPLTYPE(WINDOWSNT)+   APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’)   其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等   创建发送方通道   DEFINE CHANNEL(SDRNAME) CHLTYPE(SDR)+   CONNAME(‘100.100.100.215(1418)’) XMITQ(QTNAME) REPLACE   其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。   创建接收方通道   DEFINE CHANNEL(SDR_ TEST) CHLTYPE(RCVR) REPLACE   创建服务器连接通道   DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE   显示队列的所有属性   DISPLAY QUEUE(QNAME) [ALL]   显示队列的所选属性   DISPLAY QUEUE(QNAME) DESCR GET PUT   DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH   显示队列管理器的所有属性   DISPLAY QMGR [ALL]   显示进程定义   DISPLAY PROCESS(PRONAME)   更改属性   ALTER QMGR DESCR(‘NEW DESCRIPTION’)   ALTER QLOCAL(QNAME) PUT(DISABLED)   ALTER QALIAS(QNAME) TARGQ(TARGQNAME)   删除队列   DELETE QLOCAL(QNAME)   DELETE QREMOTE(QRNAME)   清除队列中的所有消息   CLEAR QLOCAL(QNAME)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档