ibmMQ-第六章

第六章WebSphere MQ 互连通信
目标
1.	描述WebSphere MQ 产品之间的互连。
2.	学习掌握WebSphere MQ互连的概念;传输队列,消息通道代理程序和通信链路一起组合形成了消息通道。
3.	学习怎样通过消息通道把地理位置分开的队列管理器构成一个队列管理器网络。
4.	学习判断WebSphere MQ出口(exits)的需要,对于指定的需求给出推荐使用的出口(exits)。
5.	学习使用通道的维护和配置侦听程序。
6.1基本概念
6.1.1 什么是互连通信
	对于WebSphere MQ,互连通信意味着把消息从一个队列管理器发送到另一个队列管理器,接收队列管理器可能是在本地机器或远程机器。发送队列管理器和接收队列管理器可以运行在相同的平台,也可以是WebSphere MQ所支持的任何平台,这种环境叫做分布式环境。WebSphere MQ使用DQM(Distributed Queue Management)来实现分布式环境间的通信。
	本地队列管理器有时被叫做源队列管理器(source queue manager),而远程队列管理器有时被叫做目标队列管理器(target queue manager),或叫伙伴队列管理器(partner queue manager)。

分布式队列的工作原理


	下图概括描述了分布队列的组件。
 
图,分布式队列组件

1. 应用程序使用MQCONN 调用连接到队列管理器。
2. 然后应用程序使用MQOPEN调用打开一个队列,以便可以把消息放到队列中。
3. 队列管理器拥有每个队列的定义。
4. 如果消息的目的地是远程系统的队列,那么本地队列管理器将保存消息直到消息被发送到远程队列管理器。这些对于应用程序来说是透明的。
5. 每个队列管理器都有叫做moving service通信软件;通过这个服务,一个队列管理器可以和另一个队列管理器通信。
6.  transport service 不依赖于队列管理器,它可以是下列其中的一种,这和平台有关。

	SNA APPC (Systems Network Architecture Advanced Program-to Program Communication)
	TCP/IP (Transmission Control Protocol/Internet Protocol)
	NetBIOS (Network Basic Input/Output System)
	SPX (Sequenced Packet Exchange)
	UDP (User-Datagram Protocol)

分布式组件的定义:
1. WebSphere MQ应用程序可以把消息放到已连接的队列管理器的队列中。
2. 队列管理器可以定义属于自己的队列,也可以定义属于其他队列管理器的队列。这些队列叫做远程队列定义。WebSphere MQ应用程序也可以把消息放置到远程队列中。
3. 如果消息要发送到远程队列管理器中, 本地队列管理器把消息存放到传输队列(transmission queue)中直到它消息发送到远程队列管理器。传输队列是一个特殊的本地队列,在传输队列中的消息一直被保存到被成功地发送到远程队列管理器。
4. 负责消息发送和接收的软件叫消息通道代理(Message Channel Agent (MCA))。
5. 消息是通过通道(channel)来实现队列管理器之间传输,通道是一条两个队列管理器之间的通信链路,它可以把队列中的所有消息发送到远程队列管理器。

发送消息所需要的组件:
	如果要把消息发送到远程队列管理器中,那么本地队列管理器需要定义一个传输队列和一个通道。通道的两端都需要分别定义,例如,发送端或接收端。一个简单通道是由本地队列管理器一个发送通道和远程队列管理器一个接收通道所组成的。这两个定义必须是相同的名字,并共同构成一个通道。
	在通道的每一端也被叫做消息通道代理(Message Channel Agent (MCA))。
	每一队列管理器都应该有一个死信队列(dead-letter queue),也叫做不能交付的消息队列(undelivered message queue)。如果消息不能到达目的队列,则将被放置到死信队列。
	下图显示了队列管理器、传输队列、通道和MCA之间的关系。

 
图,发送消息

实现接收消息所需的组件:
	如果您的应用程序序要从远程队列管理器返回到本地队列管理器,则需要定义另一个通道,它的传输方向与发送的相反。

 
图,消息的双向传输

群集组件:
与传统的WebSphere MQ 网络相比的另一种网络是群集。支持群集的版本有 WebSphere MQ for AIX, iSeries, HP-UX, Solaris, z/OS,and Windows, WebSphere MQ V5.1 for Compaq Tru64 UNIX, 和 OS/2 Warp ,群集是由具有逻辑关系的队列管理器所组成的网络。集群中的任何队列管理器可以发送消息到同一集群其他队列管理器,而不需要显示地定义通道、远程队列和与目标相对应的传输队列。在群集中的每个队列管理器只有一个传输队列来负责把消息发送到群集中的其他队列管理器。每个队列管理器只需要一个cluster-receiver通道和一个 cluster-sender通道。下图显示了名叫“CLUSTER”的集群的组件:

 
图,队列管理器的群集

	“CLUSTER”集群中有三个队列管理器,分别是 QM1, QM2和QM3。
	QM1和QM2存放了关于集群中的队列管理器和队列的完全资源信息。
	QM2 and QM3 有一些群集队列。这些队列可以被群集中的其他队列管理器访问。
	每个队列管理器有一个名叫“TO.qmgr”的cluster-receiver通道,该通道负责接收消息。
	每个队列管理器也有一个cluster-sender通道,该通道可以发送消息到其中一个资源队列管理器中。
	QM1和QM3发送资源信息到QM2,并且QM2发送资源信息到QM1中。
	您可以使用MQPUT调用把消息发送到任何其他队列管理器,但是只可以使用MQGET 调用从本地队列中检索消息。

为了解更详细的关于群集的情况,请参看《WebSphere MQ Queue Manager Clusters》。

6.1.2 分布式队列组件
	本节描述分布式队列组件,它们分别是:
	消息通道
	消息通道代理
	传输队列
	通道启动器和侦听程序
	通道出口程序
6.1.2.1 消息通道
	关于消息通道的内容,前面的章节已经详细介绍了,不再赘述。
6.1.2.2 消息通道代理(MCA)
	MCA是一个控制消息发送和接收的程序。在通道的每一端都有一个MCA。一个MCA是把消息从传输队列取出来,然后放到通讯链路上。另一个MCA接收消息,并把消息放到远程队列管理器的队列中。
	初始化通信链路的MCA叫做呼叫MCA,则另一个MCA叫响应MCA。呼叫MCA可以是发送通道,群集发送通道,服务器通道(完全意义的)或请求器通道。响应MCA可以是关联除群集发送通道之外的任何通道。

6.1.2.3 传输队列
	传输队列是一个特殊的本地队列,它是用来存放将被发送到远程队列管理器的消息的队列。在分布式队列环境中,您需要位每一个发送MCA定义一个传输队列,除非使用了WebSphere MQ 的队列管理器群集。
	您在远程队列定义中说明了传输队列名,如果没有说明传输队列名,那么队列管理器将会寻找一个和远程队列管理器相同名字的传输队列。
	您可以为队列管理器说明一个缺省传输队列。如果您没有说明传输队列名,并且没有定义和远程队列管理器同名的传输队列,那么将会使用这个缺省传输队列。
6.1.2.4 通道启动器和侦听程序
	通道启动器为发送通道充当了触发监控器,因为传输队列可以被定义为一个触发队列。当一个消息到达传输队列中,并满足了队列的触发条件,一个触发消息将被放到启动队列中,通道启动器将取出触发消息来启动相应的发送通道。如果在服务器通道中定义了对方的连接名,则也能触发服务器通道。这意味着基于消息到达传输队列中,使得通道能够被自动启动。
	您需要一个通道侦听程序来启动接收(响应)MCA。为了响应呼叫MCA的启动请求接收MCA被启动;通道侦听程序探测接入网络请求,并启动相应的通道。

 
图,通道启动器和侦听程序

通道启动器的使用依赖于平台,在z/OS平台,每个队列管理器只能有一个通道启动器;在其他平台,您可以启动多个通道启动器,并对每一个通道启动器指定一个启动队列。通常您只需要一个通道启动器。在WebSphere MQ for AIX, iSeries, HP-UX, Solaris 和 Windows
systems, 和 WebSphere MQ for Compaq Tru64 UNIX, 和 OS/2 Warp平台上可以启动三个通道启动器(缺省值),但是您可以修改这个值。对于支持群集的平台,当启动队列管理器时,通道启动器也会被自动启动。

通道侦听程序的使用也是和平台相关的。在OS/2和Windows系统中, 您可以使用WebSphere MQ 提供的通道侦听程序,也可以使用操作系统提供的程序。MQ的侦听程序有两种配置和启动方式,一种是通过配置/etc/inetd.conf文件选择使用inetd方式, 也可以使用MQ自身提供的runmqlsr程序,所不同的是:runmqlsr 是一个线程应用,所以比inetd需要更少的内存消耗。因此,采用runmqlsr方式可以提高通道相关的性能。与MQ应用程序类似,MQ的通道侦听程序也有trusted(fastpath)和non trusted(standard)两种运行方式,采用trusted运行方式可以降低CPU和内存消耗。将通道和侦听程序设置为trusted方式运行的方法是通过修改qm.ini配置文件中的MQIBindType参数来实现,即创建或修改qm.ini文件中与Channels相关的小节,例如:
Channels:
MQIBindType=FASTPATH 或者
MQIBindType=STANDARD 
其中,FASTPATH表示trusted运行方式,而STANDARD表示非trusted运行方式。

6.1.2.5 通道出口程序
如有您想做一些额外的处理(例如,加密或数据压缩),则可以编写通道出口程序或使用 SupportPacs。使用网址:http://www.software.ibm.com/WebSphere MQ/txppacs/txpsumm.html 找到WebSphere MQ的事务处理SupportPacs。
WebSphere MQ的通道出口程序是在MCA执行过程中被调用的。通道出口程序有六种类型:
	安全出口(Security exit)
用作安全性检查,例如,接收方认证。
	消息出口(Message exit)
对消息的操作,例如,传输前进行加密。
	发送和接收出口(Send and receive exits)
对消息切割的操作,例如,数据压缩和解压。
	消息重试出口(Message-retry exit)
用于处理消息不能到达目的地的问题。
	通道自动定义出口(Channel auto-definition exit)
用于自动定义接收通道和服务器连接通道。
	传输重试出口(Transport-retry exit)
当通讯失败时,用来暂停把数据发送到通道。

通道出口程序的处理顺序如下:
1. 通道双方数据初始化成功后,调用通道安全出口。在通道启动阶段.这些必须要成功完成,才能把消息发送出去。
2. 通道消息出口程序被发送MCA调用,被发送到接收MCA的每个消息部分都将调用发送出口程序。

3.接收MCA当接收到消息的每部分就会调用接收出口程序,然后当整个消息接收完成后调用消息出口程序。

 
图,通道出口程序被调用的次序


消息重试出口程序被用来决定接收MCA在采取其他策略之前试图放消息到目标队列的次数。这个出口程序在WebSphere MQ for z/OS上不支持。

6.1.3 死信队列
如果消息不能被发送到正确的目的地,那么消息将被发送到死信队列,例如由于目标队列不存在,或队列已满。死信队列也能在通道的发送方使用,例如,数据转换失败。我们建议针对每个队列管理器定义一个死信队列。如果没有定义死信队列,MCA将不能放消息,消息就会被滞留在传输队列中,那么通道将被停止。
	如果快速、非永久的消息不能被交付,并且目标系统没有定义死信队列,那么这些非永久消息就会被丢弃。然而使用死信队列将会影响消息的交付次序。
6.1.4怎样到达远程队列管理器
在源和目标队列管理器不一定总是有一个通道,可以考虑使用下列方案。
多跳(Multi-hopping)
如果源队列管理器和目标队列管理器之间没有直接的通讯链路,从源队列管理器到目标队列管理器之间可能会存在多个中间队列管理器,这种连接方式叫做多跳。在所有的队列管理器之间需要定义通道,在中间的队列管理器需要定义传输队列,如下图所示:

 
图,通过中间队列管理器到达目标队列管理器

共享通道(Sharing channels)
	作为应用程序设计者,为了要把消息发送到目标队列管理器,您可以在应用程序中说明远程队列管理器名和队列名,或为每个远程队列创建一个远程队列定义,这个远程队列定义包含了远程队列管理器名,队列名和传输队列名。这两种方法都是通过相同的传输队列把消息发送到同一目的地,如图所示:
 
图,共享传输队列

	上图描述了多个应用程序的消息可以使用同一个通道到达不同的远程队列。
使用不同的通道
如果您有不同类型的消息需要发送,那么可以在两个队列管理器之间定义多个通道。使用多个通道一般是考虑安全性或传输的负载均衡。
为了又创建另一条通道,则需要定义另一个通道和另一个传输队列,或创建一个远程队列。应用程序可以使用任何一条通道把消息发送到同一目标队列管理器。
 
图,使用多个通道
当您使用了远程队列定义,那么在应用程序中不用说明目标队列管理器和目标队列。通过使用远程队列定义,应用程序则不用关心目标队列的位置和传输队列。
使用群集
在群集中的每个队列管理器定义了一个群集接收通道。当一个队列管理器要发送消息到另一个队列管理器时,它将自动定义相应的群集发送通道。例如,如果在群集中一个队列有多个实例,那么群集发送通道将被定义到拥有队列的所有队列管理器。WebSphere MQ使用了一种负载均衡管理算法(轮循机制)来选择一个可用的队列管理器。如果想了解更详细的情况,请参考《WebSphere MQ Queue Manager Clusters》。
6.2 实现应用程序通信
	本节主要更详细地介绍WebSphere MQ产品之间的互连通信,阅读本节之前需要理解通道、队列等概念。
6.2.1发送消息到远程队列管理器
这部分描述了把消息从一个队列管理器发送到另一个队列管理器的最简单的方法,发送消息前需要做如下的准备工作:

1. 检查通讯链路,确保可用。
2. 启动队列管理器。
3. 启动通道启动器。
4. 启动侦听程序。

您也需要有合适的WebSphere MQ权限来创建对象。
在源队列管理器上需要定义如下对象:
– 发送通道
– 远程队列定义
– 启动队列 (在z/OS平台上是必须的,其它平台是可选的。)
– 传输队列
– 死信队列 (推荐)
在目标队列管理器上需要定义如下对象:
– 接收通道
– 目标队列
– 死信队列(推荐)
针对不同的平台,您可以使用不同的方法来定义对象:
例如,在OS/2, Windows systems, UNIX systems, and Compaq OpenVMS Alpha 平台,您可以使用《WebSphere MQ Script (MQSC) Command Reference》书中的WebSphere MQ 命令或《WebSphere MQ Programmable Command Formats and dministration Interface》书中PCF 命令。仅在Windows系统中,您可以使用图形界面,WebSphere MQ explorer和WebSphere MQ Web Administration。

定义通道
为了把消息从一个队列管理器发送到另一个队列管理器,您需要定义两个通道;一个是在源队列管理器,另一个是在目标队列管理器。
	在源队列管理器
定义一个通道类型为SENDER的通道,您需要说明如下属性:
1,使用的传输队列名( XMITQ属性)。
2,目标系统的连接名(CONNAME属性)。
3,正使用的通讯协议 ( TRPTYPE属性)。在 AIX, iSeries, Compaq Tru64 UNIX, HP-UX, OS/2 Warp, Solaris, 和 Windows, 可以不设置这个属性,而使用通道的缺省值。

	在目标队列管理器
定义一个通道类型为RECEIVER的通道,并且和发送通道同名。设置正使用的通讯协议(TRPTYPE属性)。在 AIX, iSeries, Compaq Tru64 UNIX, HP-UX, OS/2 Warp, Solaris, 和 Windows, 可以不设置这个属性,而使用通道的缺省值。
接收通道的定义都普遍相同,如果您有几个队列管理器同时往同一个队列管理器发送消息,那么发送通道和接收通道都是相同的名字,这样在接收方只要定义一个接收通道就可以负责接收所有的消息。
当已经定义了通道,您可以使用“PING CHANNEL”来测试通道。这个命令从发送通道发送了一个特殊的消息到接收通道,并且检测它的返回情况。

定义队列
为把消息从一个队列管理器发送到另一个队列管理器,您需要定义六个队列;在源队列管理器需要定义四个,目标队列管理器要定义两个。

	在源队列管理器
1,远程队列定义
在这个定义中需要说明下列属性:
远程队列管理器名
	目标队列管理器名
远程队列名
在目标队列管理器上的目标队列名。
传输队列名
传输队列的名称,您可以不说明它。如果没有说明这个属性,将会使用一个和目标队列管理器同名的传输队列,或者这个传输队列不存在,将会使用缺省传输队列。建议传输队列名和目标队列管理器同名,以便这个队列在缺省情况下能找到它。
2,启动队列定义
在z/OS平台上,这是必须定义的;其他平台上使可选的。在z/OS平台上您必须定义队列名为“SYSTEM.CHANNEL.INITQ”的启动队列,在其它平台您也可以使用它。
3,传输队列定义
一个本地队列的“USAGE”属性被设置成“XMITQ”。如果您使用了 WebSphere MQ for iSeries ,那么“USAGE”属性是“*TMQ”。
4,死信队列定义—推荐
定义一个死信队列是为了存放不能交付的消息。
	在目标队列管理器
1,本地队列定义
目标队列。这个队列名必须和在源队列管理器中的远程队列定义中远程队列名的属性值相同。
2,死信队列—推荐
定义一个死信队列是为了存放不能交付的消息。
发送消息
当您把消息放在源队列管理器的远程队列定义中时,这消息将被存放在传输队列中,直到通道被启动。当通道被启动,消息被交付到远程队列管理器的目标队列中。
启动通道
在发送队列管理器上使用“START CHANNEL”命令启动通道。当您启动发送通道时,接收通道将被自动地启动(由侦听程序启动),消息然后被发送到目标队列。消息通道的两端都必须处在“running”状态,消息才能被发送。由于通道的两端是处在不同的队列管理器中,它们使用了不同的属性。
发送消息之前,发送MCA把大消息分割成小消息,然后通过通道发送出去,在目标队列管理器再把这些小消息组装成大消息,这些步骤对用户来说是透明的。一个MCA在传输消息时可以启动多个线程,这种叫“pipelining”的过程能更有效地提高消息传输的效率,从而提高通道的性能。
6.2.2触发通道
下面主要介绍触发的概念,您可以在《WebSphere MQ Application Programming Guide》文档中找到关于触发机制更详细的描述。
 
图,触发的概念

上图描述了触发所需的对象和事件发生的顺序:
1. 本地队列管理器从应用程序或MCA放一个消息到传输队列。
2. 当触发条件满足时,本地队列管理器产生一条触发消息并放到启动队列。
3. 长期运行的通道启动器监控着启动队列,并检索队列中的触发消息。
4. 通道启动器按照消息中的内容处理触发消息。触发消息中可能包括需要被启动的通道名。
5. 被触发的本地应用程序或MCA将从传输队列中检索消息。

为了配置触发环境,您需要做如下准备工作:
1,创建传输队列,设置启动队列属性为“SYSTEM.CHANNEL.INITQ”。
2,确保启动队列“SYSTEM.CHANNEL.INITQ”存在。
3,确保通道启动程序是可用的并在运行。启动通道启动器时需要提供启动队列名。
4,创建进程定义,如果没有创建,那么确保进程定义的“UserData”属性值包含了通道名,对于 WebSphere MQ for AIX, iSeries, HP-UX, Linux, Solaris 和 Windows systems, 和WebSphere MQ for Compaq Tru64 UNIX, 和 OS/2 Warp平台, 可以不创建进程定义,如果不创建进程定义,您可以在传输队列的“TriggerData”属性中设置为通道名。
5,如果使用了进程定义,请确保传输队列定义中包含了进程定义名,和启动队列名,并设置合适的触发条件。

注意:
1. 通道启动器程序充当了“触发监控器”,监控着启动队列,用来启动通道。
3. 可以定义多个启动队列和触发进程。
4. 推荐的触发类型为“FIRST”。

6.2.3消息的安全性
分布式队列管理通过通道两端的同步点协调来确保消息被正确地传输。如果协调过程发现了错误,将关闭通道,把消息安全地存放在传输队列中,直到通道被重新启动。当通道启动时,同步过程可以恢复可疑(in-doubt)状态。处理通道的可疑状态可疑用下列方法:
1. 用提交或回滚的方法Resolve通道。
2. 复位通道的消息序号。

只有意外的情况,才会出现通道可疑的情况,一般情况通道能自动解决可疑状态。
 
快速, 非永久消息
在 WebSphere MQ for AIX, iSeries, HP-UX, Linux, Solaris, Windows systems, 和 OS/2 Warp平台,通道的NPMSPEED (nonpersistent message speed) 属性可以用来说明任何非永久性消息将更快地传输。当快速、非永久消息在传输中,通道出现了中断,消息可能被丢失。如果接收通道不能把消息放到目的队列时,则将被放到死信队列中;如果死信队列没有定义,那么消息将被丢弃。
6.2.4 WebSphere MQ对象配置实例
*echo "	修改队列管理器的死信队列为DEADQ"
ALTER  QMGR +
       DEADQ('DEADQ') +
       TRIGINT(10000) 
       
*echo "	定义远程队列"
DEFINE QREMOTE ('0000_1') +
       DEFPSIST(YES) +
       XMITQ('QM0000') +
       RNAME('0000_1') +
       RQMNAME('QM0000') +
       REPLACE

DEFINE QREMOTE ('0000_2') +
       DEFPSIST(YES) +
       XMITQ('QM0000') +
       RNAME('0000_2') +
       RQMNAME('QM0000') +
       REPLACE

*echo "	定义死信队列"
DEFINE QLOCAL ('DEADQ') +
       DEFPSIST(YES) +
       MAXDEPTH(20000) +
       MAXMSGL(4194304) +
       REPLACE
       
*echo "	定义错误日志队列"
DEFINE QLOCAL ('ERRMSG') +
       DEFPSIST(YES) +
       MAXDEPTH(10000) +
       MAXMSGL(1048576) +
       REPLACE

*echo "	定义本地接收队列"
DEFINE QLOCAL ('nnnn_1') +
       DEFPSIST(YES) +
       MAXDEPTH(100000) +
       MAXMSGL(1048576) +
       TRIGGER +
       TRIGTYPE(FIRST) +
       PROCESS('CICS.PRO') +
       INITQ('SYSTEM.CICS.INITIATION.QUEUE') +
       REPLACE
       
*echo "	定义传输队列"
DEFINE QLOCAL ('QM0000') +
       DEFPSIST(YES) +
       MAXDEPTH(100000) +
       MAXMSGL(1048576) +
       USAGE(XMITQ) +
       TRIGGER +
       TRIGTYPE(FIRST) +
       TRIGDATA('nnnn.0000') +
       INITQ('SYSTEM.CHANNEL.INITQ') +
       REPLACE

*echo "	修改system.cics.initiation.queue队列的属性"
ALTER QLOCAL ('SYSTEM.CICS.INITIATION.QUEUE') +
       DESCR('WebSphere MQ Default CICS Initiation queue') +
       DEFPSIST(YES) +
       MAXDEPTH(100000) +
       MAXMSGL(1000) 
       
       
*echo "	定义接收通道"
DEFINE CHANNEL ('0000.nnnn') CHLTYPE(RCVR) +
       TRPTYPE(TCP) +
       BATCHSZ(50) +
       HBINT(300) +
       MRRTY(10) +
       MRTMR(1000) +
       REPLACE

*echo "	定义发送通道"
DEFINE CHANNEL ('nnnn.0000') CHLTYPE(SDR) +
       TRPTYPE(TCP) +
       BATCHSZ(50) +
       CONNAME('NPC') +
       DISCINT(1800) +
       HBINT(300) +
       LONGRTY(999999999) +
       LONGTMR(300) +
       SHORTRTY(10000) +
       SHORTTMR(30) +
       XMITQ('QM0000') +
       REPLACE

DEFINE CHANNEL ('SYSTEM.ADMIN.SVRCONN') CHLTYPE(SVRCONN) +
       TRPTYPE(TCP) +
       HBINT(300) +
       MAXMSGL(4194304) +
       MCAUSER('mqm') +
       REPLACE

*echo "	定义接收进程"
DEFINE PROCESS ('CICS.PRO') REPLACE +
       APPLTYPE(CICS) +
       APPLICID('MCTL') 
       


6.3通道的维护
6.3.1通道的状态
下图显示了所有可能的通道状态层次结构,在 WebSphere MQ for AIX, iSeries, HP-UX, Linux, Solaris, 和Windows systems, 和 WebSphere MQ V5.1 for OS/2 Warp平台,这些状态对服务器连接通道也适用。
 
图,通道状态


如果通道的状态分为inactive和current两大类;“current”可以是Stopped,Starting,Retrying和Active的情况。通道Acitve的情况又可分为Initializing,Binding,Requesting,Running,Paused或Stopping的状态。




下图显示通道状态之间的变化关系。
 

注意:
1. 当通道处于INITIALIZING, BINDING, REQUESTING, RUNNING, PAUSED, or或STOPPING状态时,这将消耗系统资源,并且通道的进程或线程正在运行;因为通道是Active状态。
2. 当通道是STOPPED状态时, 会话可能是active,因为下一个状态时未知的。

6.3.2通道维护命令
下面将详细地介绍通道有关的维护命令。
创建通道
为创建一个新通道,您需要创建两个通道定义,在通信的双方各定义一个。这两个通道的名字必须时相同的,而且两端的通道类型必须匹配,例如:发送和接收。可以使用MQSC命令“DEFINE CHANNEL”来创建通道,在命令中需要指定通道名,通道类型,连接名,通道描述(可选),传输队列名(可选)和传输协议,等还有许多可选的属性可以设置。

注意:
建议在WebSphere MQ的网络中所有的通道名唯一,并且通道名中最好包含了源队列管理器名和目标队列管理器名。

创建通道的例子

DEFINE CHANNEL(QM1.TO.QM2) CHLTYPE(SDR) +
DESCR(’Sender channel to QM2’) +
CONNAME(QM2) TRPTYPE(TCP) XMITQ(QM2) CONVERT(YES)
I
修改通道
可以使用 MQSC命令“ALTER CHANNEL”来修改现有通道定义,但是通道名和通道类型不能修改。
删除通道
可以使用 MQSC命令“DELETE CHANNEL”来删除现有通道定义。
查看通道定义
可以使用 MQSC命令“DISPLAY CHANNEL”来查看现有通道定义。可以说明通道名,通道类型(可选),和其它属性,或查看所有的属性。

查看通道定义的例子
DISPLAY CHANNEL(QM1.TO.QM2) TRPTYPE,CONVERT
DISPLAY CHANNEL(QM1.TO.*) TRPTYPE,CONVERT
DISPLAY CHANNEL(*) TRPTYPE,CONVERT
DISPLAY CHANNEL(QM1.TO.QMR34) ALL


查看通道状态
可以使用 MQSC命令“DISPLAY CHSTATUS”来查看现有通道状态。
显示的通道信息包括:
	通道名
	通信连接名
	通道的In-doubt状态
	上一个消息序号
	传输队列名
	in-doubt 标识
	上一个提交消息序号
	逻辑工作单元标识
	进程ID
	线程 ID (仅OS/2 和 Windows 支持)


查看通道状态的例子

DISPLAY CHSTATUS(*) CURRENT
DISPLAY CHSTATUS(QM1.TO.*) SAVED

Ping 通道
使用MQSC 命令“PING CHANNEL”用固定的数据消息来测试和远端的连接.ping通道并没有使用传输队列和目标队列。它只是使用了通道定义、通讯链路和网络设置。只用通道当前状态不是active的情况下才使用它。这个命令只能在发送通道和服务器通道方使用。
命令返回的结果是“Ping complete”或错误消息。
启动通道
使用MQSC命令“START CHANNEL”启动发送通道、服务器通道和请求器通道。如果通道是采用触发方式启动,那么不用手工执行启动命令。当接收通道处在disabled的状态时,也可以使用“START CHANNEL”命令启动它。在WebSphere MQ for AIX, iSeries, HP-UX, Linux, Solaris, 和Windows systems, 和 WebSphere MQ V5.1 for Compaq Tru64 UNIX, 和 OS/2 Warp,如果服务器连接通道处在disabled状态,也可以使用“START CHANNEL”命令启动它。启动处在disabled状态的接收通道或服务器连接通道,即是复位通道和允许通道被远程启动。当通道被启动时,发送MCA读通道定义文件并打开传输队列,并远程启动相应的接收或服务器通道。

通道启动成功的条件:
1,本地和远端的通道定义必须存在。
2,传输队列必须存在,并且没有其它通道使用它。
3,本地和远程的MCA必须存在。
4,通讯链路必须可用。
5,本地和远程队列管理器必须是处在运行状态。
6,消息通道一定不在运行。
停止通道
使用MQSC命令“STOP CHANNEL”停止通道。停止通道的命令只能对除客户连接之外的通道进行操作。

停止通道的方式:
静态停止(Stop quiesce)
STOP CHANNEL(QM1.TO.QM2) MODE(QUIESCE)
这种方式将顺序地停止通道,必须完成当前的消息处理并确保事务的一致性。
注意:
如果通道是空闲的,将不终止接收通道。 

强制停止(Stop force)
STOP CHANNEL(QM1.TO.QM2) MODE(FORCE)

这种方式立即停止通道,但不终止通道的线程或进程。通道并没有完成当前的消息处理,因此可能使通道处在可疑的状态。通常,推荐系统管理员使用静态停止通道。
终止停止(Stop terminate)
STOP CHANNEL(QM1.TO.QM2) MODE(TERMINATE)

这种方式立即停止通道,并终止通道的线程或进程。
复位通道
可以使用MQSC命令“RESET CHANNEL”改变消息序号。这个命令可以适用于任何消息通道,但不能用在MQI通道(客户连接或服务器连接)。通道被启动后,将使用新的消息序号。如果是对发送通道或服务器通道进行复位,当下次通道重新启动时将通知通道的另一方。
Resolve通道
从发送通道或服务器通道使用MQSC命令“RESOLVE CHANNEL”来处理可疑的消息。“RESOLVE CHANNEL”命令可以接受 BACKOUT 或 COMMIT参数,Backout将把可疑消息恢复到传输队列,而Commit将丢弃可疑消息。

6.3.3设置MaxChannels和MaxActiveChannels属性
MaxChannels和MaxActiveChannels分别代表队列管理器允许配置的通道的最大个数和允许同时运行的通道的个数,MaxChannels的缺省值是100,MaxActiveChannels的缺省值与MaxChannels相同。如果您的并发通道连接个数超过了100,您需要修改这两个参数。这对于大并发的Client/Server间通讯尤为重要。
	例如,在unix平台,修改qm.ini文件如下所示:

CHANNELS:
  MaxChannels = 200         ; Maximum number of Channels allowed.
  MaxActiveChannels = 150  ; Maximum number of Channels allowed to be
                           ; active at any time.  

6.4配置侦听程序
	对于不同的平台或不同的通讯协议,侦听程序的配置也会存在着差别,下面将举例介绍在Windows和unix平台上针对TCP/IP协议的侦听程序的配置过程。
6.4.1 Windows 平台
为了运行WebSphere MQ提供的侦听程序,并把通道作为一个线程运行,则使用RUNMQLSR 命令,例如:

RUNMQLSR -t tcp [-m QMNAME] [-p 1822]

方括号中的参数是可选的。如果使用缺省队列管理器,则不用说明QMNAME;如果使用缺省端口号1414,,则也不用设置端口号的参数。
	您可以停止非活动的队列管理器的所有侦听程序,使用如下命令:
ENDMQLSR [-m QMNAME]

如果命令中没有队列管理器名,则是指缺省队列管理器。通道能成功启动之前,必须要启动侦听程序。WebSphere MQ for Windows可以自动地启动队列管理器、通道启动器、通道、侦听程序和命令服务器。可以使用IBM WebSphere MQ Services snap-in工具定义队列管理器的服务。

6.4.2 unix 平台
您可以使用TCP/IP 侦听程序 (INETD) 或WebSphere MQ侦听程序。unix平台的WebSphere MQ侦听程序和Windows平台的一致。


1,使用TCP/IP侦听程序
为了启动unix系统上的通道,需要编辑/etc/services文件和inetd.conf文件。 

	编辑/etc/services 文件: 

注意: 
只有超级用户或root用户才能编辑/etc/services文件。
在文件中增加如下一行:
WebSphere MQ                           1414/tcp

其中1414表示侦听端口号,可以选择其它未使用的端口号。
	编辑/etc/inetd.conf 文件: 
在文件中增加如下一行:
WebSphere MQ stream tcp nowait mqm /mqmtop/bin/amqcrsta amqcrsta [-m Queue_Man_Name]

为了使修改的配置生效,需要用root用户执行如下命令: 
On AIX: 
refresh -s inetd

On other UNIX systems: 
kill -1 <process number>
6.5本章小结
	本章主要介绍了WebSphere MQ互连通信的基本概念,例如,分布式组件,死信队列,和远程队列管理器通信。描述了怎样实现应用程序间的通信,把消息从本地队列管理器发送到远程队列管理器。为了确保WebSphere MQ互连通信的可靠性,需要能熟练维护消息通道,并掌握侦听程序的配置步骤。
6.6本章练习
1.实现两个队列管理之间的数据通讯,下列哪一个可以没有?
(1)通信链路。
(2)MCA之间的通讯协议。
(3)远程队列定义。
(4)传输队列。
答案:(3)
2.WebSphere MQ的通道总是成对的。
(1)对        (2)错
答案:(2)
3.传输队列是一种需要定义的特殊队列类型。
(1)对        (2)错
答案:(2)
4.哪一个是合法的MCA通道类型,并实现从传输队列中发送消息?
(1)发送器通道(Sender)
(2)接收器通道(Receiver)
(3)请求器通道(Requester)
(4)服务器通道(Server)
答案:(1)(4)
5.	修改MQSeries for AIX V5.3的qm.ini文件中的CHANNELS节的属性,从PipeLineLength=2修改成PipeLineLength=4,将会产生什么效果?
(1)	任何新定义的通道将会启动4个执行线程。
(2)	MQSeries Version 5.2系统中的所有通道将有4个执行线程。
(3)	非永久性消息的吞吐量将提高2倍。
(4)	没有影响。
答案:(4)
6.	以下哪一个通道出口可以在WebSphere MQ网络中用来加密消息?
(1)	安全出口(a security exit)
(2)	消息出口(a message exit)
(3)	消息重试出口(a message retry exit)
(4)	消息加密出口(a message encryption exit)
答案:(2)
7.	如果SENDER通道的SEQWRAP的属性值和RECEIVER通道值不相同,那么将会发生什么?
(1)	在通道启动时,以两个通道的SEQWRAP最小值启动。
(2)	通道将不启动。
(3)	在通道启动时,以两个通道的SEQWRAP最大值启动。
(4)	优先考虑SENDER通道的定义值。
(5)	没有任何变化,由SENDER通道进行控制,RECEIVER通道不能说明SEQWRAP值。
答案:(2)

8.	练习实现两个队列管理器之间的双向通信。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 9.1.5.0-ibm-mq-explorer-win64 是 IBM MQ Explorer 的一个版本号,适用于 Windows 64位操作系统。 IBM MQ Explorer 是 IBM MQ 中的一个可视化管理工具,可用于管理和监控 IBM MQ 消息队列系统。它提供了一个用户友好的界面,使得管理员可以轻松地创建、配置和管理消息队列以及相关的资源。 这个版本号中的 "9.1.5.0" 表示 IBM MQ Explorer 的主要版本号为 9.1.5.0,其中 "9" 是主要版本号,"1" 是次要版本号,"5" 是修订版本号,"0" 是构建版本号。这些版本号的变化通常代表了功能改进、问题修复和性能优化等方面的更新。 "-ibm-mq-explorer-win64" 表示这个版本适用于 Windows 64位操作系统,即该软件的安装包可以在 Windows 64位操作系统上运行和安装。 总结起来,9.1.5.0-ibm-mq-explorer-win64 是 IBM MQ Explorer 的一个版本号,适用于 Windows 64位操作系统。使用这个版本的 IBM MQ Explorer,管理员可以方便地管理和监控 IBM MQ 消息队列系统,提高整个系统的可靠性和性能。 ### 回答2: 9.1.5.0-ibm-mq-explorer-win64是一个IBM MQ资源管理器的版本号,特指适用于Windows 64位操作系统的版本。IBM MQ是一个强大的消息中间件软件,它提供了可靠的消息传递、异步通信和数据传输的能力。 IBM MQ Explorer是IBM MQ的一个工具,它提供了图形化的界面,用于管理和监控IBM MQ资源。在9.1.5.0版本中,IBM MQ Explorer提供了一些新的功能和改进,以提高管理员和开发人员的工作效率。 通过IBM MQ Explorer,用户可以轻松地创建和管理队列、通道、主题等IBM MQ资源,对消息进行发送和接收,监视队列的状态和性能等。其直观的界面和易于使用的操作,使得用户能够更加方便地配置和管理消息的传递。 此外,IBM MQ Explorer还提供了一些高级功能,如安全认证、日志记录和错误处理等。用户可以根据自己的需求进行配置,确保消息的安全和可靠性。 总之,9.1.5.0-ibm-mq-explorer-win64是一个用于Windows 64位操作系统的IBM MQ资源管理器版本。它提供了图形化的界面和各种功能,帮助用户轻松管理和监控IBM MQ资源,提高消息传递的效率和可靠性。 ### 回答3: 9.1.5.0-ibm-mq-explorer-win64是IBM MQ的一个版本,它是为Windows 64位操作系统设计的。IBM MQ是一种消息传递中间件,用于在不同应用程序之间进行可靠的、异步的消息通信。 该版本的IBM MQ Explorer是IBM MQ的一个可视化管理工具,它提供了一个图形化界面来管理和监控IBM MQ资源。使用IBM MQ Explorer,用户可以轻松地创建队列管理器、队列和通道IBM MQ资源,以及配置连接和传输属性。它还可以帮助用户查看和监视队列的状态和消息流,以及执行日常管理任务,如启动和停止队列管理器、清除队列和查看错误日志。 9.1.5.0-ibm-mq-explorer-win64版本的IBM MQ Explorer在Windows 64位操作系统上提供了更好的性能和功能。它具有更可靠、更快速的数据传输和更稳定的连接,能够处理大量的消息和高并发的通信。此外,它还提供了更多的安全功能,如SSL加密和身份验证,以确保消息的机密性和完整性。 总之,9.1.5.0-ibm-mq-explorer-win64是一个功能强大的IBM MQ版本,它提供了易于使用的图形化界面来管理和监控消息传递系统。无论是开发者还是系统管理员,都可以通过使用IBM MQ Explorer来简化他们在消息通信方面的工作,并提高系统的可靠性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值