当前位置:
文档之家› 一种消息队列中间件的设计与实现
一种消息队列中间件的设计与实现
Abstract The design and implementation of a new message queuing middleware is introduced.The size of message is unlimiteห้องสมุดไป่ตู้. It applied to Windows 2000/NT/98/ME. It makes message reture many times and provides MQ Clinent API with COM.
消息队列服务系统处理高并发服务是又一技术难点 服 务器由原来处理 5 个并发任务到 16 个并发任务 再到 2000 个并发任务 一直在不断地改进 使用异步 I/O 机制 处理 好进程与线程的正确关系是消息队列服务系统又一技术关键 所在
能以 COM 形式提供 MQ Client API 是目前消息队列服务 系统的需求 API 面对过程函数的组件接口在使用过程中会 带来一定的麻烦 使用 COM 面向对象的组件接口比使用 API 组件接口有很大的好处 可以减少定义函数 附加附件 制 定优先级等一系列繁琐的过程
MQ Client API 11 服务器输出队列支持实时并行发送
万方数据
4 结果对比
目前成熟的消息队列服务系统对每个消息队列的容量 所能容纳的字节数 都有限制 该值因系统不同而不同 有输出 redhat 8.0 的限制 或者是每个消息队列所能容纳的最 大消息数 在 redhad 8.0 中 该限制是受消息队列容量制约 的 消息个数要小于消息队列的容量 字节数
Key words Message oriented middleware; Message queuing; COM; Receipt
1 消息中间件现状分析和面临的一些问题
中间件能够屏蔽操作系统和网络协议的差异 为应用程 序提供多种通信机制 并提供相应的平台以满足不同领域的 需要 因此 中间件为应用程序提供了一个相对稳定的高层 应用环境
消息队列服务系统即把消息中间件技术应用于实践中的 一种位于平台(硬件和操作系统)和应用之间的服务程序
消息队列[1]是在多个不同的应用之间实现相互通信的一 种异步传输模式 相互通信的应用可以分布于同一台机器上
也可以分布于相连的网络空间中的任一位置 它的实现原理 是 消息的发送者把自己想要发送的信息放入一个容器中 称 为 Message 然后把它保存至一个系统公用空间的消息队列 中 本地或者是异地的消息接收程序再从该队列中取出发给 它的消息进行处理
MQ Client API
Application
Application
图 2 CNT MQ Service 体系结构
该系统在实现上达到以下技术功能与性能指标 1 支持消息队列产品的核心功能要求及服务原语
支持 2 支持重叠 I/O 和内存映像文件两种应有模式 同时
支持 Windows 2000/NT/98/ME 操作系统 并能通过配置充分 发挥不同操作系统的性能
3 最高传输效率应相当于网络线路速度 4 最大的出 入并发连接数应 1 000 个 5 逻辑上无消息体最大容量限制 使消息传输不用应 用层进行拆分与组合 6 同时支持同步和异步两种消息接收模式 7 消息到达队列时 能够实时通知客户端应用程序 8 每队列可以接受多个客户端同时进行访问 能够按 一定算法动态分配消息给客户端 9 支持事务处理 实现消息队列操作的回滚与提交 10 以 COM Component Object Model 形式提供
系统对消息队列的限制还有系统范围内的最大消息队列 个数 以及整个系统范围内的最大消息数 一般来说 实际 开 发 过 程 中 不 会 超 过 这 个 限 制 而 CNT(CSS Network Technology) MQ Service 解决了这一问题
如图 2 所示 该系统拟包括以下几个组成部分 队列管理器 负责管理服务器上所有的消息队列 包括 消息的出队 入队 分发到其它 MQ 服务器 服务响应组件 负责响应来自网络的队列操作请求 然 后将请求提交 Queue Manager 执行 队列客户端应用开发接口 MQ Client API 向应用程 序提供队列访问的接口 并将应用程序调用转化成服务请求 通过网络送往 Service Component 应用程序通过访问 MQ Client API 便可以实现消息的收发操作
多数流行的中间件用专有的 API 和专有的协议 使得应 用建立单一厂家产品 来自不同厂家的产品很难互操作 有 些中间件服务只提供一些平台的实现 从而限制了应用在异 构系统之间的移植 应用开发者在这些中间件服务上建立自 己的应用还要承担相当大的风险 随着技术的发展 他们往 往还需重写他们的系统 尽管中间件服务提高了分布计算的 抽象化程度 但应用开发者还需面临许多艰难的设计选择 例如 开发者还需决定分布应用在 client 方和 server 方的功 能分配 通常将表示服务放在 client 以方便使用显示设备 将数据服务放在 server 以靠近数据库 但也并非总是如此 何况其它应用功能如何分配也是不容易确定的
在消息队列服务系统中 消息传输的可靠性与消息的大 小受到一定的制约 目前 微软和 IBM 的消息中间件产品对 消息的大小和容量都有一定的限制 在本次开发中 使用拆 分和组装技术 实现了整个系统对所传输的消息大小和容量 不受限制
82
为了消息传输的可靠性能足够高 使用消息多级回执技 术 使消息可以回滚和反悔 当消息从队列中被提取的同时 使其暂存于缓存区中 此时即使断电 也可以保证消息的可 靠传输而不被延误和丢失
我们分析得出消息中间件需要解决以下问题 1 目前成熟的消息队列服务系统对每个消息队列的容
量 所能容纳的字节数 都有限制 2 适用的操作系统范围受到一定的限制 3 消息传递可靠性不高 4 面对函数的 API 接口对用户的使用受到了一定的
限制 5 消息队列服务系统的高并发处理能力
2 消息队列服务系统设计
Design and Implementation of a Message Queuing Middleware
WANG Xiaoxia1,2, CHEN Liang3 (1. College of Software, Hunan University, Changsha 410082; 2. Center of Network, National Institute, Chinese Academy of Social Sciences, Beijing 100081; 3. Department of Integrated Cause, China National Computer Software and Technology Service Corporation, Beijing 100081)
采用消息队列技术带来的好处是 由于是异步通信 无 论是发送方还是接收方都不用等待对方返回成功消息 就可 以执行余下的代码 因而大大提高了事物处理的能力 在信 息传送过程中 信息发送机制具有一定功能的故障恢复能力 消息传递机制使得消息通信的双方具有不同的物理平台成为 可能 消息队列分为用户创建队列和系统队列[4]
第 31 卷 第 21 期
Vol.31
21
软件技术与数据库
计算机工程 Computer Engineering
文章编号 1000 3428(2005)21 0081 03
文献标识码 A
2005 年 11 月 November 2005
中图分类号 TP311
一种消息队列中间件的设计与实现
王小霞 1,2 陈 亮 3 1 湖南大学软件学院 长沙 410082 2 社会科学院民族所网络信息中心 北京 100081 3 中软股份公司系统集成事业部 北京 100081
用户队列分为 1 公共队列 在整个可传递消息的"消息队列"网络
中复制并传输 并且有可能由网络连接的所有站点访问 2 专用队列 不在整个网络中发布 相反 它们仅
在所驻留的本地计算机上可用 专用队列只能由知道队列的 完整路径名或标签的应用程序访问
3 管理队列 包含确认在给定"消息队列"网络中发 送的消息回执的消息 指定希望 MessageQueue 组件使用的 管理队列
在消息传递机制中 有两个比较重要的概念 一个是消 息 一个是队列 消息是由通信双方所需要传递的信息 它 可以是各式各样的媒体 如文本 声音 图像等 消息最终 的理解方式 为消息传递的双方事先商定 这样做的好处是 一是相当于对数据进行了简单的加密 二采用自己定义的格 式可以节省通信的传递量 消息可以含有发送和接收者的标 识 这样只有指定的用户才能看到只传递给他的信息和返回 是否操作成功的回执 消息也可以含有时间戳 以便接收方 对某些与时间相关的应用进行处理 消息还可以含有到期时 间 它表明如果在指定时间内消息还未到达则此消息作废 这主要用于与时间性关联较为紧密的应用
操作所需的管理和通知消息的专用队列 消息队列和电子邮件有着很多相似处 它们都包含多个
属性 用于保存消息 消息类型中都指出发送者和接收者的 地址 然而它们的用处却有着很大的区别 消息队列的发送 者和接收者是应用程序 而电子邮件的发送者和接收者通常 是人 可以用图 1 来描述消息队列应用程序的体系结构
发送进程
4 响应队列 包含目标应用程序接收到消息时返回 给发送应用程序的响应消息 指定希望 MessageQueue 组件 使用的响应 队列
系统队列分为 1 日记队列 可选地存储发送消息的副本和从队列
中移除的消息副本 2 死信队列 存储无法传递或已过期的消息的副本 3 专用系统队列 是一系列存储系统执行消息处理
MSMQ 传出队列 公用队列
专用队列 系统队列
接收进程
图 1 消息队列应用程序简要结构
3 具有自主知识产权消息队列服务系统的实现
CNT(CSS Network Technology) MQ Service 是中软网络 技术股份公司开发的一种分布式消息队列服务系统 是一个 架构于 Windows 系统平台的消息队列服务系统 解决了目前 消息队列服务系统存在的缺陷和不足