内容发布更新时间 : 2024/12/23 23:13:50星期一 下面是文章的全部内容请认真阅读。
第十六章 分发列表 (Distribution List)
概念
通常情况下,MQPUT或MQPUT1的操作对象是WebSphere MQ中的一个目标队列。然而,有的时候操作对象也可以是多个目标队列。在具体操作的时候,这些目标队列放在一个数组列表中,MQPUT/MQPUT1操作针对这个列表一次完成,且可以在一个交易中进行。这里的列表就是分发列表 (Distribution List)。
分发列表中的队列可以是本地队列,也可以是远程队列。如果多个远程队列的目标队列管理器相同且支持分发列表,则消息在网络上只需要传送一次,等消息到达对方队列管理器后,自行分发至多个目标队列中。当然,队列管理器之间的通信环境 (比如通道、监听器等等) 需要事先建立。
MQPUT 分发列表 队列管理器1 本地队列1 本地队列2 本地队列3 队列管理器2 远程队列A 传输队列 远程队列B 本地队列A 本地队列B 交易 网络上只传输一次
由于分发列表功能并未被WebSphere MQ的所有平台产品所支持,例如 WebSphere MQ for z/OS就不支持这一功能。所以,使用分发列表功能之前必须确认应用所在的队列管理器支持这种功能。这里的应用程序与队列管理器的连接可以是Client方式,也可以是Binding方式。另外,如果针对相同的远程队列管理器上的多个远程队列操作,而需要消息在网络上只传输一次,这需要目标队列管理器也支持分发列表功能才可以。支持分发列表功能的平台
有:
? AIX ? HP-UX ? Solaris ? Windows ? Linux
? Compaq OpenVMS ? OS/2 ? OS/400
队列管理器有DISTL属性,可以取值YES或NO,表示是否支持分发列表功能。对于支持分发列表功能的队列管理器,该属性取值为YES。该属性在队列管理器创建时就定下了,与生俱来,无法修改。
本地队列和模型队列也有DISTL属性,可以取值YES或NO,对于普通本地队列,缺省值为NO,对于传输队列,缺省值为YES。这个属性是针对传输队列而言的,在消息通道建立后,MCA会设定传输队列的DISTL属性,标志对方队列管理器是否支持分发列表功能。如果该属性值为YES,则在多个远程队列的目标队列管理器相同时,消息在网络上只需要传送一次,到达对方后由目标队列管理器分发。如果该属性值为NO,则发送消息的队列管理器会将消息复制并传送多次。
对象 队列管理器 属性 DISTL 可取值 ? ? YES NO YES NO 说明 静态属性,无法修改 队列 (Local/Model) DISTL ? ? 针对传输队列,由MCA设定 队列管理器的DISTL属性是静态的,而传输队列的DISTL属性是MCA动态设定的。在程序中需要得到该属性值通常可以用MQINQ函数通过 MQIA_DIST_LISTS 选项进行查询,得到的值可能是MQDL_SUPPORTED或MQDL_NOT_SUPPORTED,分别表示支持或不支持分发列表功能。 分发列表可以在交易环境中工作,消息会在多个队列中等待直到提交或回滚。这时如果有远程队列,则消息也会在相应的传输队列上等待提交或回滚指令,这时不会堵住传输队列其它的正常传送工作。分发列表也可以不在交易环境中工作,一旦调用MQPUT或MQPUT1,消息立即发送到所有的队列中。无论是否在交易环境中,某一路上的失败 (比如目标队列满) 不会影响其它路的传送。
配置举例
我们可以把本地队列管理器QM上的本地队列Q和远程队列管理器QM1和QM2上的队列Q1、Q2、Q3、Q4放入一个分发列表中一起操作。当然,事先需要配置通信环境,如
下:
QM: ---
DEFINE QLOCAL QM1: ----
DEFINE QLOCAL QM2: ----
DEFINE QLOCAL
REPLACE
(Q4) (C2) (RCVR)
+ + +
REPLACE CHLTYPE
DEFINE QLOCAL DEFINE CHANNEL
(Q3)
+
REPLACE
(Q2) (C1) (RCVR) (TCP)
+ + + +
REPLACE CHLTYPE TRPTYPE REPLACE
DEFINE QLOCAL DEFINE CHANNEL
(Q1)
+
REPLACE
(QM1) (XMITQ) (QM2) (XMITQ) (C1) (SDR) (TCP)
('127.0.0.1 (1415)') (QM1) (C2) (SDR) (TCP)
('127.0.0.1 (1416)') (QM2)
+ + + + + + + + + + + + + +
USAGE REPLACE USAGE REPLACE CHLTYPE TRPTYPE CONNAME XMITQ REPLACE CHLTYPE TRPTYPE CONNAME XMITQ REPLACE
DEFINE QLOCAL
(Q)
+
DEFINE QLOCAL
DEFINE CHANNEL
DEFINE CHANNEL