请参考信息中心的Using a client channel definition table with WebSphere MQ classes for Java。我已经链接到 V7.0 信息中心,因为您提到这是您正在使用的版本,但在以后的版本中它的工作原理相同。
在通道定义中存在多实例 QMgrs 和相应的多实例 CONNAME 属性之前,有更常见的客户端通道定义表或 CCDT。 CCDT 包含一个或多个 QMgrs 的任意数量通道的 CLNTCONN 定义。当多个条目在 QMName 字段中具有相同的值时,它们被视为一个组。 (注意,CCDT 中的 QMName 不需要与实际的 QMgr 名称匹配。这将迫使您使用非唯一的 QMgr 名称,这不是一个好习惯。它只是一个索引CCDT 来识别通道组。)
为了更好地理解 CCDT,请阅读 Infocenter 中Connecting WebSphere MQ client applications to queue managers 下的主题,尤其是渠道权重和亲和性示例,客户渠道定义表的作用 em> 和 MQCONN 调用示例。 (从左侧的目录访问这些内容。在框架的最右上角是一个按钮,如果您迷路了,该按钮会将目录转到您所在的任何页面。)
CCDT 的一个“陷阱”是其中的每个频道名称都必须是唯一的。这与多实例 CONNAME 不同,后者在不同的 IP 地址上查找完全相同的通道。这是因为 CCDT 文件是使用 QMgr 上的 MQSC 命令维护的。在队列管理器管理的名称空间内,所有对象名称都必须是唯一的。在 QMgr 上定义通道时,每个通道必须具有唯一的名称。在 CCDT 的情况下,条目是使用 CLNTCONN 通道定义的。虽然这些指向定义在 other 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 规则。