一种消息队列中间件的设计与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作所需的管理和通知消息的专用队列 消息队列和电子邮件有着很多相似处 它们都包含多个
属性 用于保存消息 消息类型中都指出发送者和接收者的 地址 然而它们的用处却有着很大的区别 消息队列的发送 者和接收者是应用程序 而电子邮件的发送者和接收者通常 是人 可以用图 1 来描述消息队列应用程序的体系结构
发送进程
我们分析得出消息中间件需要解决以下问题 1 目前成熟的消息队列服务系统对每个消息队列的容
量 所能容纳的字节数 都有限制 2 适用的操作系统范围受到一定的限制 3 消息传递可靠性不高 4 面对函数的 API 接口对用户的使用受到了一定的
限制 5 消息队列服务系统的高并发处理能力
2 消息队列服务系统设计
多数流行的中间件用专有的 API 和专有的协议 使得应 用建立单一厂家产品 来自不同厂家的产品很难互操作 有 些中间件服务只提供一些平台的实现 从而限制了应用在异 构系统之间的移植 应用开发者在这些中间件服务上建立自 己的应用还要承担相当大的风险 随着技术的发展 他们往 往还需重写他们的系统 尽管中间件服务提高了分布计算的 抽象化程度 但应用开发者还需面临许多艰难的设计选择 例如 开发者还需决定分布应用在 client 方和 server 方的功 能分配 通常将表示服务放在 client 以方便使用显示设备 将数据服务放在 server 以靠近数据库 但也并非总是如此 何况其它应用功能如何分配也是不容易确定的
摘 要 介绍了一种新的消息队列服务系统方案的设计与实现 方案可以做到传输消息的大小不受限制 同时支持 Windows 2000/NT/98/ME 操作系统 并通过配置能充分发挥不同操作系统的性能 实现消息队列操作的回滚与提交 使消息进行多级回执 以 COM 形式提供 MQ Clinent API 关键词 消息中间件 消息队列 COM 回执
Key words Message oriented middleware; Message queuing; COM; Receipt
1 消息中间件现状分析和面临的一些问题
中间件能够屏蔽操作系统和网络协议的差异 为应用程 序提供多种通信机制 并提供相应的平台以满足不同领域的 需要 因此 中间件为应用程序提供了一个相对稳定的高层 应用环境
作 者 简 介 王小霞(1971 ) 女 工程师 硕士生 主研方向 计算 机网络通信 陈 亮 硕士生 收稿日期 2004-09-21 E-mail wangzt@cass.org.cn
81
万方数据
息 可以恢复到故障发生之前的状态 而以快递方式发送的 消息则丢失了 另一方面 采用消息传递机制 发送方不要 再担心接收方是否启动 是否发生故障等非必要因素 只要 消息成功发送出去 就可以认为处理完成 而实际上对方可 能甚至未曾开机 或者实际完成时可能已经是第二天了
消息队列服务系统即把消息中间件技术应用于实践中的 一种位于平台(硬件和操作系统)和应用之间的服务程序
消息队列[1]是在多个不同的应用之间实现相互通信的一 种异步传输模式 相互通信的应用可以分布于同一台机器上
也可以分布于相连的网络空间中的任一位置 它的实现原理 是 消息的发送者把自己想要发送的信息放入一个容器中 称 为 Message 然后把它保存至一个系统公用空间的消息队列 中 本地或者是异地的消息接收程序再从该队列中取出发给 它的消息进行处理
MSMQ 传出队列 公用队列
专用队列 系统队列
接收进程
图 1 消息队列应用程序简要结构
3 具有自主知识产权消息队列服务系统的实现
CNT(CSS Network Technology) MQ Service 是中软网络 技术股份公司开发的一种分布式消息队列服务系统 是一个 架构于 Windows 系统平台的消息队列服务系统 解决了目前 消息队列服务系统存在的缺陷和不足
用户队列分为 1 公共队列 在整个可传递消息的"消息队列"网络
中复制并传输 并且有可能由网络连接的所有站点访问 2 专用队列 不在整个网络中发布 相反 它们仅
在所驻留的本地计算机上可用 专用队列只能由知道队列的 完整路径名或标签的应用程序访问
3 管理队列 包含确认在给定"消息队列"网络中发 送的消息回执的消息 指定希望 MessageQueue 组件使用的 管理队列
第 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
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)
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 形式提供
在消息队列服务系统中 消息传输的可靠性与消息的大 小受到一定的制约 目前 微软和 IBM 的消息中间件产品对 消息的大小和容量都有一定的限制 在本次开发中 使用拆 分和组装技术 实现了整个系统对所传输的消息大小和容量 不受限制
82
为了消息传输的可靠性能足够高 使用消息多级回执技 术 使消息可以回滚和反悔 当消息从队列中被提取的同时 使其暂存于缓存区中 此时即使断电 也可以保证消息的可 靠传输而不被延误和丢失
Abstract The design and implementation of a new message queuing middleware is introduced.The size of message is unlimited. It applied to Windows 2000/NT/98/ME. It makes message reture many times and provides MQ Clinent API with COM.
消息队列是发送和接收消息的公用存储空间 它可以存 在于内存中或者是物理文件中 消息可以以两种方式发送 即快递方式和可恢复模式,它们的区别在于 快递方式为了消 息的快速传递 把消息放置于内存中 而不放于物理磁盘上 以获取较高的处理能力 可恢复模式在传送过程的每一步骤 中 都把消息写入物理磁盘中 以得到较好的故障恢复能力 消息队列可以放置在发送方 接收方所在的机器上 也可以 单独放置在另外一台机器上 正是由于消息队列在放置方式 上的灵活性 形成了消息传送机制的可靠性 当保存消息队 列的机器发生故障而重新启动以后 以可恢复模式发送的消
4 响应队列 包含目标应用程序接收到消息时返回 给发送应用程序的响应消息 指定希望 MessageQueue 组件 使用的响应 队列
系统队列分为 1 日记队列 可选地存储发送消息的副本和从队列
中移除的消息副本 2 死信队列 存储无法传递或已过期的消息的副本 3 专用系统队列 是一系列存储系统执行消息处理
采用消息队列技术带来的好处是 由于是异步通信 无 论是发送方还是接收方都不用等待对方返回成功消息 就可 以执行余下的代码 因而大大提高了事物处理的能力 在信 息传送过程中 信息发送机制具有一定功能的故障恢复能力 消息传递机制使得消息通信的双方具有不同的物理平台成为 可能 消息队列分为用户创建队列和系统队列[4]
系统对消息队列的限制还有系统范围内的最大消息队列 个数 以及整个系统范围内的最大消息数 一般来说 实际 开 发 过 程 中 不 会 超 过 这 个 限 制 而 CNT(CSS Network Technology) MQ Service 解决了这一问题
MQ Client API 11 服务器输出队列支持实时并行发送
万方数据
4 结果对比
目前成熟的消息队列服务系统对每个消息队列的容量 所能容纳的字节数 都有限制 该值因系统不同而不同 有输出 redhat 8.0 的限制 或者是每个消息队列所能容纳的最 大消息数 在 redhad 8.0 中 该限制是受消息队列容量制约 的 消息个数要小于消息队列的容量 字节数
消息队列服务系统处理高并发服务是又一技术难点 服 务器由原来处理 5 个并发任务到 16 个并发任务 再到 2000 个并发任务 一直在不断地改进 使用异步 I/O 机制 处理 好进程与线程的正确关系是消息队列服务系统又一技术关键 所在
能以 COM 形式提供 MQ Client API 是目前消息队列服务 系统的需求 API 面对过程函数的组件接口在使用过程中会 带来一定的麻烦 使用 COM 面向对象的组件接口比使用 API 组件接口有很大的好处 可以减少定义函数 附加附件 制 定优先级等一系列繁琐的过程
CNT MQ Service on server A
Q1:
Q2:
Queue
Q3:
Manager
Qn:
Service Component
LAN
CNT MQ Service on server B
:Q1
:Q2
Queue
Manຫໍສະໝຸດ Baiduger
:Q3
:Qn
Service Component
WAN
LAN
MQ Client API
如图 2 所示 该系统拟包括以下几个组成部分 队列管理器 负责管理服务器上所有的消息队列 包括 消息的出队 入队 分发到其它 MQ 服务器 服务响应组件 负责响应来自网络的队列操作请求 然 后将请求提交 Queue Manager 执行 队列客户端应用开发接口 MQ Client API 向应用程 序提供队列访问的接口 并将应用程序调用转化成服务请求 通过网络送往 Service Component 应用程序通过访问 MQ Client API 便可以实现消息的收发操作
属性 用于保存消息 消息类型中都指出发送者和接收者的 地址 然而它们的用处却有着很大的区别 消息队列的发送 者和接收者是应用程序 而电子邮件的发送者和接收者通常 是人 可以用图 1 来描述消息队列应用程序的体系结构
发送进程
我们分析得出消息中间件需要解决以下问题 1 目前成熟的消息队列服务系统对每个消息队列的容
量 所能容纳的字节数 都有限制 2 适用的操作系统范围受到一定的限制 3 消息传递可靠性不高 4 面对函数的 API 接口对用户的使用受到了一定的
限制 5 消息队列服务系统的高并发处理能力
2 消息队列服务系统设计
多数流行的中间件用专有的 API 和专有的协议 使得应 用建立单一厂家产品 来自不同厂家的产品很难互操作 有 些中间件服务只提供一些平台的实现 从而限制了应用在异 构系统之间的移植 应用开发者在这些中间件服务上建立自 己的应用还要承担相当大的风险 随着技术的发展 他们往 往还需重写他们的系统 尽管中间件服务提高了分布计算的 抽象化程度 但应用开发者还需面临许多艰难的设计选择 例如 开发者还需决定分布应用在 client 方和 server 方的功 能分配 通常将表示服务放在 client 以方便使用显示设备 将数据服务放在 server 以靠近数据库 但也并非总是如此 何况其它应用功能如何分配也是不容易确定的
摘 要 介绍了一种新的消息队列服务系统方案的设计与实现 方案可以做到传输消息的大小不受限制 同时支持 Windows 2000/NT/98/ME 操作系统 并通过配置能充分发挥不同操作系统的性能 实现消息队列操作的回滚与提交 使消息进行多级回执 以 COM 形式提供 MQ Clinent API 关键词 消息中间件 消息队列 COM 回执
Key words Message oriented middleware; Message queuing; COM; Receipt
1 消息中间件现状分析和面临的一些问题
中间件能够屏蔽操作系统和网络协议的差异 为应用程 序提供多种通信机制 并提供相应的平台以满足不同领域的 需要 因此 中间件为应用程序提供了一个相对稳定的高层 应用环境
作 者 简 介 王小霞(1971 ) 女 工程师 硕士生 主研方向 计算 机网络通信 陈 亮 硕士生 收稿日期 2004-09-21 E-mail wangzt@cass.org.cn
81
万方数据
息 可以恢复到故障发生之前的状态 而以快递方式发送的 消息则丢失了 另一方面 采用消息传递机制 发送方不要 再担心接收方是否启动 是否发生故障等非必要因素 只要 消息成功发送出去 就可以认为处理完成 而实际上对方可 能甚至未曾开机 或者实际完成时可能已经是第二天了
消息队列服务系统即把消息中间件技术应用于实践中的 一种位于平台(硬件和操作系统)和应用之间的服务程序
消息队列[1]是在多个不同的应用之间实现相互通信的一 种异步传输模式 相互通信的应用可以分布于同一台机器上
也可以分布于相连的网络空间中的任一位置 它的实现原理 是 消息的发送者把自己想要发送的信息放入一个容器中 称 为 Message 然后把它保存至一个系统公用空间的消息队列 中 本地或者是异地的消息接收程序再从该队列中取出发给 它的消息进行处理
MSMQ 传出队列 公用队列
专用队列 系统队列
接收进程
图 1 消息队列应用程序简要结构
3 具有自主知识产权消息队列服务系统的实现
CNT(CSS Network Technology) MQ Service 是中软网络 技术股份公司开发的一种分布式消息队列服务系统 是一个 架构于 Windows 系统平台的消息队列服务系统 解决了目前 消息队列服务系统存在的缺陷和不足
用户队列分为 1 公共队列 在整个可传递消息的"消息队列"网络
中复制并传输 并且有可能由网络连接的所有站点访问 2 专用队列 不在整个网络中发布 相反 它们仅
在所驻留的本地计算机上可用 专用队列只能由知道队列的 完整路径名或标签的应用程序访问
3 管理队列 包含确认在给定"消息队列"网络中发 送的消息回执的消息 指定希望 MessageQueue 组件使用的 管理队列
第 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
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)
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 形式提供
在消息队列服务系统中 消息传输的可靠性与消息的大 小受到一定的制约 目前 微软和 IBM 的消息中间件产品对 消息的大小和容量都有一定的限制 在本次开发中 使用拆 分和组装技术 实现了整个系统对所传输的消息大小和容量 不受限制
82
为了消息传输的可靠性能足够高 使用消息多级回执技 术 使消息可以回滚和反悔 当消息从队列中被提取的同时 使其暂存于缓存区中 此时即使断电 也可以保证消息的可 靠传输而不被延误和丢失
Abstract The design and implementation of a new message queuing middleware is introduced.The size of message is unlimited. It applied to Windows 2000/NT/98/ME. It makes message reture many times and provides MQ Clinent API with COM.
消息队列是发送和接收消息的公用存储空间 它可以存 在于内存中或者是物理文件中 消息可以以两种方式发送 即快递方式和可恢复模式,它们的区别在于 快递方式为了消 息的快速传递 把消息放置于内存中 而不放于物理磁盘上 以获取较高的处理能力 可恢复模式在传送过程的每一步骤 中 都把消息写入物理磁盘中 以得到较好的故障恢复能力 消息队列可以放置在发送方 接收方所在的机器上 也可以 单独放置在另外一台机器上 正是由于消息队列在放置方式 上的灵活性 形成了消息传送机制的可靠性 当保存消息队 列的机器发生故障而重新启动以后 以可恢复模式发送的消
4 响应队列 包含目标应用程序接收到消息时返回 给发送应用程序的响应消息 指定希望 MessageQueue 组件 使用的响应 队列
系统队列分为 1 日记队列 可选地存储发送消息的副本和从队列
中移除的消息副本 2 死信队列 存储无法传递或已过期的消息的副本 3 专用系统队列 是一系列存储系统执行消息处理
采用消息队列技术带来的好处是 由于是异步通信 无 论是发送方还是接收方都不用等待对方返回成功消息 就可 以执行余下的代码 因而大大提高了事物处理的能力 在信 息传送过程中 信息发送机制具有一定功能的故障恢复能力 消息传递机制使得消息通信的双方具有不同的物理平台成为 可能 消息队列分为用户创建队列和系统队列[4]
系统对消息队列的限制还有系统范围内的最大消息队列 个数 以及整个系统范围内的最大消息数 一般来说 实际 开 发 过 程 中 不 会 超 过 这 个 限 制 而 CNT(CSS Network Technology) MQ Service 解决了这一问题
MQ Client API 11 服务器输出队列支持实时并行发送
万方数据
4 结果对比
目前成熟的消息队列服务系统对每个消息队列的容量 所能容纳的字节数 都有限制 该值因系统不同而不同 有输出 redhat 8.0 的限制 或者是每个消息队列所能容纳的最 大消息数 在 redhad 8.0 中 该限制是受消息队列容量制约 的 消息个数要小于消息队列的容量 字节数
消息队列服务系统处理高并发服务是又一技术难点 服 务器由原来处理 5 个并发任务到 16 个并发任务 再到 2000 个并发任务 一直在不断地改进 使用异步 I/O 机制 处理 好进程与线程的正确关系是消息队列服务系统又一技术关键 所在
能以 COM 形式提供 MQ Client API 是目前消息队列服务 系统的需求 API 面对过程函数的组件接口在使用过程中会 带来一定的麻烦 使用 COM 面向对象的组件接口比使用 API 组件接口有很大的好处 可以减少定义函数 附加附件 制 定优先级等一系列繁琐的过程
CNT MQ Service on server A
Q1:
Q2:
Queue
Q3:
Manager
Qn:
Service Component
LAN
CNT MQ Service on server B
:Q1
:Q2
Queue
Manຫໍສະໝຸດ Baiduger
:Q3
:Qn
Service Component
WAN
LAN
MQ Client API
如图 2 所示 该系统拟包括以下几个组成部分 队列管理器 负责管理服务器上所有的消息队列 包括 消息的出队 入队 分发到其它 MQ 服务器 服务响应组件 负责响应来自网络的队列操作请求 然 后将请求提交 Queue Manager 执行 队列客户端应用开发接口 MQ Client API 向应用程 序提供队列访问的接口 并将应用程序调用转化成服务请求 通过网络送往 Service Component 应用程序通过访问 MQ Client API 便可以实现消息的收发操作