假设队列管理器 1 被称为 MQG1,队列管理器 2 被称为 MQG2,可以分别使用连接名称 machine1.com(1701) 和 machine2.com(1702) 以及使用通道名称 MQG1.SVRCONN 和 MQG2.SVRCONN 找到它们分别,您可以在您的客户端应用程序机器上创建您的 CCDT,因此:-
runmqsc -n
将这些命令发送到runmqsc:-
DEFINE CHANNEL(MQG1.SVRCONN) CHLTYPE(CLNTCONN) CONNAME('machine1.com(1701)') QMNAME(MQG1)
DEFINE CHANNEL(MQG2.SVRCONN) CHLTYPE(CLNTCONN) CONNAME('machine2.com(1702)') QMNAME(MQG2)
然后您可以编码您的 2 x MQCONN(或 MQCONNX,如果您需要在连接上指定任何其他内容)因此:-
#include <cmqc.h> /* Includes for MQI constants */
#include <cmqstrc.h> /* Convert MQRC into string */
MQHCONN hConn1 = MQHC_UNUSABLE_HCONN;
MQHCONN hConn2 = MQHC_UNUSABLE_HCONN;
MQCHAR QMName1[MQ_Q_MGR_NAME_LENGTH] = "MQG1";
MQCHAR QMName2[MQ_Q_MGR_NAME_LENGTH] = "MQG2";
MQLONG CompCode, Reason;
MQCONN(QMName1,
&hConn1,
&CompCode,
&Reason);
if (CompCode)
{
printf("MQCONN to %s failed with reason code %s (%d)\n", QMName1, MQRC_STR(Reason), Reason);
}
MQCONN(QMName2,
&hConn2,
&CompCode,
&Reason);
if (CompCode)
{
printf("MQCONN to %s failed with reason code %s (%d)\n", QMName2, MQRC_STR(Reason), Reason);
}
请注意链接程序的方式。如果你尝试建立两个本地连接,你会得到一个返回码MQRC_ANOTHER_Q_MGR_CONNECTED。确保您与客户端库链接,设置连接选项MQCNO_CLIENT(这意味着您必须使用MQCONNX)或设置环境变量MQ_CONNECT_TYPE=CLIENT。
您可能会发现以下博客文章有用的补充阅读:-
IBM MQ Little Gem #30: MQ_CONNECT_TYPE