我有将连接MQ与用户ID而不是频道连接的要求。
我尝试过将没有chanel的用户ID和密码设置为MQEnvironment类,但得到了以下异常。
" com.ibm.mq.jmqi.JmqiException:CC = 2; RC = 2540; AMQ9520:未远程定义通道。 [3 =]"
请指导我,是否可以编写java客户端以使用用户ID而不是通道连接MQ。
答案 0 :(得分:2)
MQ应用程序有两种方式连接到队列管理器:绑定和客户端模式。
绑定模式意味着您的MQ应用程序正在SAME上运行 server作为队列管理器。因此,MQI调用将不会使用 网络资源。
客户端模式意味着您的MQ应用程序可以在任何服务器上运行 它会在发出MQI调用时使用网络资源。为了 MQCONN调用,除了队列管理器名称,您还需要 主机名/ IP地址,端口号和通道名称。
在任何一种情况下,您的MQ应用程序都应提供其用户凭据(UserID& Password)。
最后,不要使用MQEnvironment类。使用HashTable并将其传递给队列管理器构造函数类要好得多。即。
Hashtable<String, Object> mqht = new Hashtable<String, Object>();
mqht.put(CMQC.CHANNEL_PROPERTY, channelName);
mqht.put(CMQC.HOST_NAME_PROPERTY, hostName);
mqht.put(CMQC.PORT_PROPERTY, new Integer(portNumber));
mqht.put(CMQC.USER_ID_PROPERTY, userID);
mqht.put(CMQC.PASSWORD_PROPERTY, password);
try
{
MQQueueManager qMgr = new MQQueueManager(qMgrName, mqht);
System.out.println("Successfully connected to "+ qMgrName);
}
catch (com.ibm.mq.MQException mqex)
{
System.out.println("MQException cc=" +mqex.completionCode + " : rc=" + mqex.reasonCode);
}