什么是互连通信
对于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. transportservice 不依赖于队列管理器,它可以是下列其中的一种,这和平台有关。
l SNA APPC (SystemsNetwork Architecture Advanced Program-to Program Communication)
l TCP/IP (Transmission Control Protocol/Internet Protocol)
l NetBIOS (Network Basic Input/Output System)
l SPX (Sequenced Packet Exchange)
l 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)。如果消息不能到达目的队列,则将被放置到死信队列。
实现接收消息所需的组件:
如果您的应用程序序要从远程队列管理器返回到本地队列管理器,则需要定义另一个通道,它的传输方向与发送的相反。
群集组件:
与传统的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”的集群的组件:
l “CLUSTER”集群中有三个队列管理器,分别是 QM1, QM2和QM3。
l QM1和QM2存放了关于集群中的队列管理器和队列的完全资源信息。
l QM2 and QM3 有一些群集队列。这些队列可以被群集中的其他队列管理器访问。
l 每个队列管理器有一个名叫“TO.qmgr”的cluster-receiver通道,该通道负责接收消息。
l 每个队列管理器也有一个cluster-sender通道,该通道可以发送消息到其中一个资源队列管理器中。
l QM1和QM3发送资源信息到QM2,并且QM2发送资源信息到QM1中。
l 您可以使用MQPUT调用把消息发送到任何其他队列管理器,但是只可以使用MQGET 调用从本地队列中检索消息。