Java程序使用用户ID而不是通道连接WMQ

1 ibm-mq

我有这样的需求,比如用用户ID而不是通道连接MQ。

我尝试在没有chanel的情况下将用户ID和密码设置为MQEnvironment类,但出现以下异常。

com.ibm.mq.jmqi.JmqiException: CC=2;RC=2540;AMQ9520: Channel not defined remotely. [3=].
Run Code Online (Sandbox Code Playgroud)

请指导我,是否可以编写java客户端来使用用户id而不是通道连接MQ。

Rog*_*ger 5

MQ 应用程序有两种方式连接到队列管理器:绑定和客户端模式。

  • 绑定模式意味着您的 MQ 应用程序与队列管理器在同一服务器上运行。因此,MQI 调用将不会使用网络资源。

  • 客户端模式意味着您的 MQ 应用程序可以在任何服务器上运行,并且在发出 MQI 调用时将使用网络资源。对于 MQCONN 调用,除了队列管理器名称之外,您还需要主机名/IP 地址、端口号和通道名称。

无论哪种情况,您的 MQ 应用程序都应该提供其用户凭据(用户 ID 和密码)。

最后,不要使用 MQEnvironment 类。使用 HashTable 并将其传递给队列管理器构造函数类要好得多。IE

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);
}
Run Code Online (Sandbox Code Playgroud)