| hb317 回复于:2003-05-31 22:12:14
|
消息、队列和队列管理器
在 MQSeries 中需要理解的三个基本概念是:
消息
队列
队列管理器
消息
消息就是对使用它的应用程序有意义的字节串。消息是用来从一个应用程序传送数据至另一个应用程序(或相同应用程序中的不同部分)。应用程序可以在同一个平台或不同的平台上运行。
MQSeries 消息有两部分;应用程序数据和消息描述符。应用程序数据的内容和结构由使用数据的应用程序来定义。消息描述符标识了该消息,并包含其它控制信息,如消息类型以及由发送应用程序为消息指定的优先级。
队列
队列是存储消息的数据结构。由应用程序或队列管理器将消息放入队列或从队列中取出,是它的一些常规操作。
队列对于使用它们的应用程序来说是独立存在的。队列可存在于主存储器(如果它是临时的),磁盘或相似的辅助存储器(如果必须保留以备恢复的话),或同时在这两处(如果它正在使用,且必须保留以备恢复)。每个队列都属于一个队列管理器,它负责维护队列。队列管理器将接收到的消息放入合适的队列中。
队列可以在本地系统上存在,这种情况下它们称为本地队列,也可以在另一个队列管理器上存在,这种情况下它们称为远程队列。
应用程序发送消息至队列,或从队列中接收消息。例如,一个应用程序可以将消息放入队列,而另一个应用程序可以从相同队列中取出消息。
每个队列都有一些队列属性,它们确定了在应用程序引用队列时将执行的操作。属性表明:
应用程序是否可以从队列中检索消息(允许取出)。
应用程序是否可以将消息放入队列中(允许放入)。
访问队列是由一个应用程序独占还是在应用程序间共享的。
可同时在队列上存储的最大消息数(最大队列深度)。
可放入队列的消息的最大大小(最大消息大小)。
队列管理器
队列管理器为应用程序提供了排队服务,并管理属于它的队列。它确保:
根据接收到的细节更改对象属性。
当发生特殊情况时,产生特殊事件(例如设备事件或触发器事件)。
按照应用程序的请求将消息放入正确队列。如果不能完成,则将通知应用程序并给出适当的原因码。
每个队列都属于一个单一队列管理器,对于那个队列管理器来说它是本地队列。与应用程序连接的队列管理器被认为是该应用程序的本地队列管理器。对于该应用程序,属于本地管理器的队列是本地队列。 远程队列是属于另一个队列管理器的队列。远程队列管理器是非本地队列管理器的任何其它队列管理器。远程队列管理器可存在于网上的一个远程机器上,或者存在于与本地队列管理器相同的机器上。MQSeries 支持同一台机器上的多个队列管理器。
|
| hb317 回复于:2003-05-31 22:13:14
|
MQSeries 配置
最简单的配置是 MQSeries 安装在一台机器上并创建了一个队列管理器。该队列管理器允许定义队列。这样本地应用程序就可以使用这些队列交换消息。
通过应用程序与另一个队列管理器管理的队列之间进行通信需要定义消息通道。不需要定义直接到目标队列管理器的通道,适当的做法通常是仅定义下一个转接点(即中间队列管理器)。对该队列管理器可用的消息通道将被用于传递消息至目标队列管理器(或至下一个转接点)。
使用客户机/服务器结构可以创建更复杂的配置。MQSeries 产品可以作为与 MQSeries 客户机连接的 MQSeries 服务器使用。客户机和服务器不需要在相同平台上。MQSeries 支持广泛的各种客户机平台。MQSeries 产品通常会包含各种平台的客户机。附加的 MQSeries 客户机可从 MQSeries Web 站点获得。
在客户机/服务器配置中,MQSeries 服务器为客户机以及所有本地应用程序提供消息传递和排队服务。客户机通过客户机的专用通道(也叫做客户机通道)连接到服务器。这是一个符合成本效益的部署方法,因为仅使用一个 MQSeries 服务器产品副本,服务器就可支持几百个客户机。但是无论何时运行客户机上的 MQSeries 应用程序,客户机通道都必须持续可用。这与某些消息通道不需要持续可用就可支持在服务器上运行的 MQSeries 应用程序相反。
有关详细信息,请参阅通道。
MQSeries 还支持群集概念以简化设置和操作。群集是一个命名的队列管理器集合,并且任何一个队列管理器都可以不属于群集、或属于一个或多个这样的群集。群集中的队列管理器可以存在于相同或不同机器上。
如果没有已定义的队列管理器,由 MQSeries Windows NT 和 Windows 2000 版安装进程提供的缺省配置可以配置一个队列管理器加入到本地缺省群集中。队列管理器的名称是基于机器的 TCP/IP 域。
使用群集有两个主要的好处:
在一个群集中的成员之间进行通信是非常简单的,特别是因为交换消息所需的通道是根据需要自动定义和创建的。
参与队列管理器中的一些或全部队列可被定义为群集队列,这样可以使得它们自动被群集中的所有其它队列管理器知晓并使用。
有关详细信息,请参阅群集。
通道
通道为队列管理器提供了通信路径。有两种类型的通道:消息通道和 MQI 通道。
消息通道提供了在相同平台或不同平台上两个队列管理器之间的通信路径。消息通道是用于从一个队列管理器至另一个队列管理器发送消息,同时使得应用程序避免了基本网络协议的复杂性。消息通道只可单向发送消息。如果在两个队列管理器间需要双向通信,则需要两个消息通道。
客户机通道(也称为 MQI 通道)将 MQSeries 客户机连接到服务器机器上的队列管理器,并且是双向的。
如果要阅读有关通道的更多信息,以及 MQSeries 如何使用它们在网络中跨越各种系统进行通信,请参阅 MQSeries Intercommunication一书。
客户机和服务器
MQSeries 支持 MQSeries 应用程序的客户机/服务器配置。
MQSeries 客户机是 MQSeries 产品的一部分,它安装在机器上,接受来自应用程序的 MQSeries 调用并将它们传递给 MQSeries 服务器 机器。在那里它们由队列管理器处理。典型地,客户机和服务器驻留在不同机器上,但它们可以同处在一台机器上。
MQSeries 服务器是为一个或多个客户机提供排队服务的队列管理器。所有 MQSeries 对象(例如队列)都仅存在于队列管理器机器上(即 MQSeries 服务器机器上)。服务器也可以支持本地 MQSeries 应用程序。
MQSeries 服务器与普通的队列管理器之间的差别在于 MQSeries 服务器可支持 MQSeries 客户机,并且每个 MQSeries 客户机应用程序与 MQSeries 服务器之间都有一个专用的通信链路。
有关客户机支持的更多信息,请参阅 MQSeries 客户机一书。
群集
群集是一个命名的队列管理器集合。
群集需要群集内的至少一个队列管理器被定义为资源库 (即存放共享群集信息的地方)。更典型的做法是,通常指定两个或更多个资源库以提供在系统出现故障时的持续可用性。MQSeries 确保资源库中的信息保持同步。
当队列被定义为群集队列时,它可被认为是公用队列,可被群集中的其它队列管理器自由使用。这与非群集队列不同,非群集队列仅当它们的本地定义可用时,才可访问。因此,非群集队列具有专用队列的特性,仅可由那些已经配置为知道它们的队列管理器来访问。
在相同群集中具有相同名称的公用队列被认为是等价的。如果消息被发送至该队列名称,MQSeries(缺省情况下)将使用一个负载均衡算法将它发送到其中的任何一个。如果您不希望发生这一情况,可以在地址中使用队列管理器和队列名称,这就迫使消息被发送到特定的队列管理器。或者,可使用另一种实现方法来替换负载均衡例程。这就是典型的 MQSeries 行为,其中有许多示例表明标准行为可以更改,方法是在为该目的设计的出口中实现用户代码。
|
| hb317 回复于:2003-05-31 22:13:58
|
MQSeries 能力
MQSeries 可用来创建许多不同类型的解决方案。其中一些采用了平台支持或网桥和网关能力,用一种集成方法连接至现存的系统,或允许新建应用程序从现存的系统中抽取信息,或与现存系统交换信息。其它一些解决方案支持商业应用程序服务器,在其上 MQSeries 应用程序的中央池可以跨网络管理发送的工作。可以支持工作流方案的复杂的信息路由选择。 “发布/订阅”或“发送即忘”是使用不同消息流的其它应用程序方案。可以使用 MQSeries 的能力和灵活性建立负载均衡和热备用系统,MQSeries 包括了许多支持这些不同方案的特定功能。
请参阅 MQSeries 应用程序设计指南获得有关编写 MQSeries 应用程序的更多信息。
事务性支持
应用程序可能需要将一组更新组合成一个工作单元。这些更新通常是逻辑相关的,并且都必须成功以保持数据完整性。如果在组中的一个更新成功而另一个失败,那么数据完整性可能会丢失。MQSeries 支持事务性的消息传递。
工作单元成功完成后就提交。此时,所有在工作单元内所做的更新都将变成永久的并且是不可逆的。或者,如果工作单元失败了,所有更新都被逆序恢复。同步点协调是工作单元用来提交或逆序恢复完整性的进程。
本地工作单元上唯一更新的那些资源是 MQSeries 队列管理器的资源。这里同步点协调是由队列管理器自身使用单阶段提交进程提供的。
全局工作单元上属于其它资源管理器的资源,例如符合 XA 的数据库,也同时被更新。这里,必须使用两阶段提交过程,并且工作单元可由队列管理器自身协调,或由其它符合 XA 的事务管理器(例如 IBM CICS、IBM Transaction Server、IBM TXSeries、Transarc Encina 或 BEA Tuxedo)外部协调。
当队列管理器自己协调全局工作单元时,就有可能在 MQSeries 工作单元内集成数据库更新。就是说,可以编写混合的 MQSeries 和 SQL 应用程序,并且可以使用命令来一起提交或逆序恢复对队列和数据库的更改。
队列管理器使用两阶段提交协议来完成它。当实施一个工作单元时,队列管理器将首先询问每个参与的数据库管理器是否准备提交更新。只有当所有的参与者,包括队列管理器自己,都准备提交时,所有队列和数据库更新才提交。如果任何参与者不能准备它的更新时,则逆序恢复工作单元来代替提交工作单元。
如果队列管理器在提交协议期间失去与任何数据库管理器的联系,则将提供完全恢复支持。如果数据库管理器因处于未确定状态而变为不可用(就是说,已调用它作准备,但还要接收提交或逆序恢复决定),则队列管理器将记住工作单元的结果,直到它被成功传递为止。同样地,如果队列管理器终止时有未完成的提交操作,那么队列管理器重新启动时它们将被记住。
设备事件
可以使用 MQSeries 设备事件来监控队列管理器的操作。
设备事件可以在队列管理器检测到一组预定义的情况发生时生成称为事件消息的特殊消息。例如,在以下情况时将生成队列满事件消息:对于指定队列启用了“队列满”事件;应用程序发出 MQPUT 调用在队列中放入消息;并且由于队列已满引起调用失败。
其它条件也可以引起设备事件,包括:
达到队列中消息数的预定义极限
在指定时间内队列没获得服务
启动或停止的通道实例
如果将事件队列定义为远程队列,则可将所有事件队列放入单个队列管理器中(对于那些支持设备事件的节点)。然后,可以从单个节点使用生成的事件监控队列管理器的网络。
MQSeries 设备事件分为下列几种:
队列管理器事件
这些事件与队列管理器中的资源定义有关。例如,如果应用程序尝试打开队列,但关联的用户标识没有经过授权执行该操作,将生成队列管理器事件。
性能事件
这些是在资源达到阈值条件时将产生的通知。例如,达到队列深度极限,或者按照 MQGET 请求,在预先定义的时间内未对队列进行服务。可以使用 Windows NT 性能监控器来检查和控制队列的某些方面(例如,队列深度、队列深度百分率、以及有多少消息已经入队和出队)。
通道事件
这些事件是由通道报告的,作为操作期间检测条件的结果。例如,在通道实例停止时产生一个通道事件。
消息驱动处理
当消息到达队列后,它们可以使用一种称为触发的机制来自动启动应用程序。如果必要的话,应用程序可在处理完消息后停止。
|
| hb317 回复于:2003-05-31 22:17:48
|
翻到从前的一些文档,贴在这里,也不知有人看吗?
最好是能在有个tuxedo专题,cics专题。
偶想这些东西用的人很多呀,应该比8583之类的话题有人气呀!
|
| 无双 回复于:2003-06-01 15:26:25
|
以前这里都是讨论中间件的高手
但是后来论坛换成新的时速度慢了好长时间
人气下去了
我对这也不是很懂
所以只贴贴软件工程方面的资料
hb317 兄如果对这了解很多的话可以多贴这方面的资料
我也尽量学并整理一些这方面的资料到论坛中来
使用中间件的人很多
如果这里的资料多了
会吸引更多的人来讨论的
|
| 大连老K 回复于:2003-06-02 13:35:29
|
我也研究过一段时间MQ,希望能和大家多交流!
|
| jngn76 回复于:2003-06-02 15:08:56
|
hb317
我刚开始学习使用MQ,现有个问题能否给予回答
如何在传输消息时将几个消息定义为一组。问这个问题是因为我要用mq来传送文件,在接受端要将文件合并,如果有一个没传送到,文件将无法合并。
先谢了
|
| 大连老K 回复于:2003-06-02 17:09:02
|
[quote:8f452bcae8="jngn76"]hb317
我刚开始学习使用MQ,现有个问题能否给予回答
如何在传输消息时将几个消息定义为一组。问这个问题是因为我要用mq来传送文件,在接受端要将文件合并,如果有一个没传送到,文件将无法合并。
..........[/quote:8f452bcae8]
文将的拆分和合并都是自动来完成的!
|
| 无双 回复于:2003-06-02 18:42:31
|
大家多发点中间件的资料过来
一起把这个论坛做成专业的中间件论坛
当然论坛中还是会有其它讨论主题的
|
| killu 回复于:2003-06-03 17:06:09
|
我也研究了一年多的MQ了,可以共同研究研究
|
| jngn76 回复于:2003-06-05 16:23:53
|
jngn76 写到:
hb317
我刚开始学习使用MQ,现有个问题能否给予回答
如何在传输消息时将几个消息定义为一组。问这个问题是因为我要用mq来传送文件,在接受端要将文件合并,如果有一个没传送到,文件将无法合并。
..........
文将的拆分和合并都是自动来完成的!
能告诉我使用什么函数进行拆分和合并吗
谢谢了
我刚开始学,很初级的问题,很不好意思
|
| 一无所有 回复于:2003-06-07 14:04:16
|
[quote:5d88065662="无双"]大家多发点中间件的资料过来
一起把这个论坛做成专业的中间件论坛
当然论坛中还是会有其它讨论主题的[/quote:5d88065662]
无双兄,怎么还是把技术看的比管理重要啊!
没有好的过程,有再好的材料也造不出好房子。
|
| 无双 回复于:2003-06-07 15:53:18
|
一无所有兄
但关键管理是高层的东西
很多人都没有机会实践的
以前发了不少管理方面的好帖子
但是只是游览的人多讨论的人少
而中间件则是讨论的人多
现在提高人气的办法就是使用中间件来吸引更多的人来到这里
管理方面的我也会继续讨论的
要不一无所有兄你也可以整理一些中间件的帖子上来啊
对这方面我没有什么经验
|
| 无双 回复于:2003-06-07 15:53:35
|
一起把这个论坛做好吧
|
| somber 回复于:2003-06-10 11:07:37
|
我想了解一些TongLINK/Q的具体资料,感觉白皮书还不是很详细。有哪位高手用过?
|
| paceway 回复于:2003-08-08 10:04:20
|
找了一个星期的MQ系列的资料,到早上终于发现开始入门了,接下来练习练习,有兴趣的可以多交流。
|
| 无双 回复于:2003-08-08 10:13:18
|
写一下学习心得
这样交流更方便了
|
| 无双 回复于:2003-08-08 10:14:02
|
另外哪里有比较好的MQ资料呢
如果方便的话放上网址
以后大家交流更方便
|