标题：MQSeries
MQSeries 基本简介
MQSeries 是个通信系统，他在各种广泛的硬件和软件平台之间提供确保的、异步的、一次性数据发送。
这些特性使得 MQSeries 成为应用程式间通信的最佳基础结构，并成为一个正确的解决方案，不论这些应用程式是在同一台机器上运行还是在由一个或多个网络分隔的不同机器上运行。 
MQSeries 支持所有重要的通信协议，另外还提供在使用不同协议的网络之间的路由。仅需非常少的编程或不必编程，MQSeries 网桥和网关产品就能允许便捷地访问许多现有的系统和应用程式环境，例如 Lotus Notes、Web 浏览器、Java 小应用程式和许多其他产品。
确保的传递能力反映为许多在 MQSeries 中内建的功能能确保不会因为基本系统或网络结构故障而丢失数据。确保的传递能力使得 MQSeries 形成了关键通信系统的主干，并被受托传递重要数据。在某些适当的场合也可提供你选择健壮性稍低的服务质量。例如，可能在一些环境中，你会需要更快速的传递，而对可信传递方面强调较少。 
MQSeries 中的异步处理支持是指在发送和接收应用程式之间的数据交换是和时间无关的。这允许发送和接收应用程式相互分离，这样发送方就能继续处理，而不必等待接收方确认其已接收到数据。实际上，在发送数据时目标应用程式甚至不必运行。同样，在传送数据时，能不使用发送方和接收方之间的网络路径。 
一次性传递数据是个重要的考虑因素，特别是在金融和商业应用程式中，你肯定不希望从一个帐户中移动大量钱款至另一帐户的请求重复发生。
MQSeries 中需要理解的三个基本概念
1. 消息消息就是对使用他的应用程式有意义的字节串。消息是用来从一个应用程式传送数据至另一个应用程式（或相同应用程式中的不同部分）。应用程式能在同一个平台或不同的平台上运行。 
MQSeries 消息有两部分；应用程式数据和消息描述符。应用程式数据的内容和结构由使用数据的应用程式来定义。消息描述符标识了该消息，并包含其他控制信息，如消息类型及由发送应用程式为消息指定的优先级。2. 队列队列是存储消息的数据结构。由应用程式或队列管理器将消息放入队列或从队列中取出，是他的一些常规操作。 
队列对于使用他们的应用程式来说是独立存在的。队列可存在于主存储器（如果他是临时的），磁盘或相似的辅助存储器（如果必须保留以备恢复的话），或同时在这两处（如果他正在使用，且必须保留以备恢复）。每个队列都属于一个队列管理器，他负责维护队列。队列管理器将接收到的消息放入合适的队列中。 
队列能在本地系统上存在，这种情况下他们称为本地队列，也能在另一个队列管理器上存在，这种情况下他们称为远程队列。 
应用程式发送消息至队列，或从队列中接收消息。例如，一个应用程式能将消息放入队列，而另一个应用程式能从相同队列中取出消息。 
每个队列都有一些队列属性，他们确定了在应用程式引用队列时将执行的操作。属性表明： 
应用程式是否能从队列中检索消息（允许取出）。 
应用程式是否能将消息放入队列中（允许放入）。 
访问队列是由一个应用程式独占还是在应用程式间共享的。 
可同时在队列上存储的最大消息数（最大队列深度）。 
可放入队列的消息的最大大小（最大消息大小）。3. 队列管理器队列管理器为应用程式提供了排队服务，并管理属于他的队列。他确保： 
根据接收到的细节更改对象属性。 
当发生特别情况时，产生特别事件（例如设备事件或触发器事件）。 
按照应用程式的请求将消息放入正确队列。如果不能完成，则将通知应用程式并给出适当的原因码。 
每个队列都属于一个单一队列管理器，对于那个队列管理器来说他是本地队列。和应用程式连接的队列管理器被认为是该应用程式的本地队列管理器。对于该应用程式，属于本地管理器的队列是本地队列。 远程队列是属于另一个队列管理器的队列。远程队列管理器是非本地队列管理器的所有其他队列管理器。远程队列管理器可存在于网上的一个远程机器上，或存在于和本地队列管理器相同的机器上。MQSeries 支持同一台机器上的多个队列管理器。
MQSeries 设置
最简单的设置是 MQSeries 安装在一台机器上并创建了一个队列管理器。该队列管理器允许定义队列。这样本地应用程式就能使用这些队列交换消息。 
通过应用程式和另一个队列管理器管理的队列之间进行通信需要定义消息通道。不必定义直接到目标队列管理器的通道，适当的做法通常是仅定义下一个转接点（即中间队列管理器）。对该队列管理器可用的消息通道将被用于传递消息至目标队列管理器（或至下一个转接点）。 
使用客户机/服务器结构能创建更复杂的设置。MQSeries 产品能作为和 MQSeries 客户机连接的 MQSeries 服务器使用。客户机和服务器不必在相同平台上。MQSeries 支持广泛的各种客户机平台。MQSeries 产品通常会包含各种平台的客户机。附加的 MQSeries 客户机可从 MQSeries Web 站点获得。 
在客户机/服务器设置中，MQSeries 服务器为客户机及所有本地应用程式提供消息传递和排队服务。客户机通过客户机的专用通道（也叫做客户机通道）连接到服务器。这是个符合成本效益的部署方法，因为仅使用一个 MQSeries 服务器产品副本，服务器就可支持几百个客户机。不过无论何时运行客户机上的 MQSeries 应用程式，客户机通道都必须持续可用。这和某些消息通道不必持续可用就可支持在服务器上运行的 MQSeries 应用程式相反。 
MQSeries 还支持群集概念以简化设置和操作。群集是个命名的队列管理器集合，并且所有一个队列管理器都能不属于群集、或属于一个或多个这样的群集。群集中的队列管理器能存在于相同或不同机器上。 
如果没有已定义的队列管理器，由 MQSeries 视窗系统 NT 和 视窗系统 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 行为，其中有许多示例表明标准行为能更改，方法是在为该目的设计的出口中实现用户代码。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 请求，在预先定义的时间内未对队列进行服务。能使用 视窗系统 NT 性能监视器来检查和控制队列的某些方面（例如，队列深度、队列深度百分率、及有多少消息已入队和出队）。 
通道事件 
这些事件是由通道报告的，作为操作期间检测条件的结果。例如，在通道实例停止时产生一个通道事件。 
消息驱动处理 
当消息到达队列后，他们能使用一种称为触发的机制来自动启动应用程式。如果必要的话，应用程式可在处理完消息后停止。