请参阅信息中心中的将客户机通道定义表与用于 Java 的 WebSphere MQ 类一起使用。我已经链接到 V7.0 信息中心,因为您提到这是您正在使用的版本,但在以后的版本中它的工作方式相同。
在通道定义中出现多实例 QMgrs 和相应的多实例 CONNAME 属性之前,有更常见的客户端通道定义表或 CCDT。CCDT 包含一个或多个 QMgrs 的任意数量通道的 CLNTCONN 定义。当多个条目在 QMName 字段中具有相同的值时,它们被视为一个组。(注意,CCDT 中的 QMName不需要与实际的 QMgr 名称匹配。这将迫使您使用非唯一的 QMgr 名称,这不是一个好习惯。它只是 CCDT 中用于识别通道组的索引。 )
为了更好地理解 CCDT,请阅读Infocenter 中将WebSphere MQ 客户端应用程序连接到队列管理器下的主题,特别是通道权重和亲和性示例、客户端通道定义表的角色和MQCONN 调用示例。(从左侧的目录中访问这些内容。在框架的最右上角是一个按钮,如果您迷路了,该按钮会将目录转到您所在的任何页面。)
CCDT 的一个“陷阱”是其中的每个频道名称都必须是唯一的。这与多实例 CONNAME 不同,后者在不同的 IP 地址上查找完全相同的通道。这是因为 CCDT 文件是使用 QMgr 上的 MQSC 命令维护的。在队列管理器管理的名称空间内,所有对象名称都必须是唯一的。在 QMgr 上定义通道时,每个通道必须具有唯一的名称。在 CCDT 的情况下,条目是使用 CLNTCONN 通道定义的。虽然这些指向在其他QMgrs 上定义的 SVRCONN 通道,但因为所有 CLNTCONN 通道都定义在同一个命名空间中,所以它们必须是唯一的。
为了进一步说明这一点,请考虑配置一个名为 PAYROLL 的应用程序。您可以根据应用名称和 QMgr 名称来构造通道名称。这会产生一个通道,该通道描述从左到右读取的 from-->to 关系。例如,要为三个 QMgrs 定义 CCDT,您需要:
* On any QMgr
DEF CHL(PAYROLL.QMGR1) CHLTYPE(CLNTCONN) QMNAME(PAY) CONNAME("qm1host(1414)")
DEF CHL(PAYROLL.QMGR2) CHLTYPE(CLNTCONN) QMNAME(PAY) CONNAME("qm2host(2414)")
DEF CHL(PAYROLL.QMGR3) CHLTYPE(CLNTCONN) QMNAME(PAY) CONNAME("qm3host(3414)")
*On QMgr1
DEF CHL(PAYROLL.QMGR1) CHLTYPE(SVRCONN)
*On QMgr2
DEF CHL(PAYROLL.QMGR2) CHLTYPE(SVRCONN)
*On QMgr3
DEF CHL(PAYROLL.QMGR3) CHLTYPE(SVRCONN)
然后应用程序将 QMgr 名称指定为*PAY
,并且 WMQ 客户端代码在三个条目中进行选择。其他参数可用于加权条目和重试顺序,您将在文档中看到这些参数。
注意:显示的示例被精简为说明该概念的基本元素。用于生产实现的 SVRCONN 条目将包括 MCAUSER 和/或通道出口,可能还有 SSL 参数,以及在 V7.1 或更高版本上的一些 CHLAUTH 规则。