Ibm mq 使用用户Id而不是通道连接WMQ的Java程序

Ibm mq 使用用户Id而不是通道连接WMQ的Java程序,ibm-mq,Ibm Mq,我需要使用userid而不是channel连接MQ 我曾尝试在没有chanel的情况下将用户id和密码设置为MQEnvironment类,但出现以下异常 com.ibm.mq.jmqi.JmqiException: CC=2;RC=2540;AMQ9520: Channel not defined remotely. [3=]. 请指导我,是否可以编写java客户端以使用用户id而不是通道连接MQ。MQ应用程序连接到队列管理器有两种方法:绑定和客户端模式 绑定模式意味着您的MQ应用程序正在同

我需要使用userid而不是channel连接MQ

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

com.ibm.mq.jmqi.JmqiException: CC=2;RC=2540;AMQ9520: Channel not defined remotely. [3=].

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

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

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

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

在任何一种情况下,您的MQ应用程序都应该提供其用户凭据(用户ID和密码)

最后,不要使用MQEnvironment类。使用哈希表并将其传递给队列管理器构造函数类要好得多。i、 e

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);
}
Hashtable mqht=new Hashtable();
mqht.put(CMQC.CHANNEL_属性,channelName);
mqht.put(CMQC.HOST\u NAME\u属性,主机名);
mqht.put(CMQC.PORT_属性,新整数(端口号));
mqht.put(CMQC.USER\u ID\u属性,userID);
mqht.put(CMQC.PASSWORD_属性,PASSWORD);
尝试
{
MQQueueManager qMgr=新的MQQueueManager(qMgrName,mqht);
System.out.println(“成功连接到”+qMgrName);
}
捕获(com.ibm.mq.MQException-mqex)
{
System.out.println(“MQException cc=“+mqex.completionCode+”:rc=“+mqex.reasonCode”);
}

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

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

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

在任何一种情况下,您的MQ应用程序都应该提供其用户凭据(用户ID和密码)

最后,不要使用MQEnvironment类。使用哈希表并将其传递给队列管理器构造函数类要好得多。i、 e

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);
}
Hashtable mqht=new Hashtable();
mqht.put(CMQC.CHANNEL_属性,channelName);
mqht.put(CMQC.HOST\u NAME\u属性,主机名);
mqht.put(CMQC.PORT_属性,新整数(端口号));
mqht.put(CMQC.USER\u ID\u属性,userID);
mqht.put(CMQC.PASSWORD_属性,PASSWORD);
尝试
{
MQQueueManager qMgr=新的MQQueueManager(qMgrName,mqht);
System.out.println(“成功连接到”+qMgrName);
}
捕获(com.ibm.mq.MQException-mqex)
{
System.out.println(“MQException cc=“+mqex.completionCode+”:rc=“+mqex.reasonCode”);
}

请您解释一下您的想法,说“用户id而不是频道”。。。在MQ中,用户ID是与通道不同的概念。您的意思是希望用于身份验证的用户标识由应用程序指定,而不是MQ ServerConn通道上定义的MCA用户标识吗?感谢Calanais的回复。此处,用户id是组的成员。此组验证MQ对象。纠正我,如果我错了,请你解释一下你的想法,说“用户id而不是频道”。。。在MQ中,用户ID是与通道不同的概念。您的意思是希望用于身份验证的用户标识由应用程序指定,而不是MQ ServerConn通道上定义的MCA用户标识吗?感谢Calanais的回复。此处,用户id是组的成员。此组验证MQ对象。请纠正我的错误,如果只是添加一点,那么如果为客户端使用的SVRCONN通道设置了MCAUser属性(不是空的),则应用程序提供凭据是没有用的。因为MCAUser的值将用于身份验证和授权。通道的MCAUser从不用于身份验证。此外,无论您是使用第三方安全出口进行身份验证还是使用MQ v8身份验证,所有应用程序都应提供用户凭据,并停止使用在MCAUser中设置值。希望IBM能在未来版本的MQ中降低MCAUser属性。谢谢罗杰。此信息足以理解MQ CONN调用。@nitgeek请注意,在MQ v8和更高版本中,如果您有CONNATH CHKCLNT(可选)或更高版本,并且采用CTX(是),如果用户传递了有效的用户名和密码,MQ将采用此用户,并将覆盖SVRCONN的MCAUSER值以进行OAM检查。即使在MQ 7.1和7.5中,CHLAUTH规则也可以覆盖用于OAM检查的SVRCONN通道的MCAUSER值。仅添加一点,如果为客户端使用的SVRCONN通道设置了MCAUSER属性(不是空的),则应用程序提供凭据是无用的。因为MCAUser的值将用于身份验证和授权。通道的MCAUser从不用于身份验证。此外,无论您是使用第三方安全出口进行身份验证还是使用MQ v8身份验证,所有应用程序都应提供用户凭据,并停止使用在MCAUser中设置值。希望IBM能在未来版本的MQ中降低MCAUser属性。谢谢罗杰。此信息足以理解MQ CONN调用。@nitgeek请注意,在MQ v8和更高版本中,如果您有CONNATH CHKCLNT(可选)或更高版本,并且采用CTX(是),如果用户传递了有效的用户名和密码,MQ将采用此用户,并将覆盖SVRCONN的MCAUSER值以进行OAM检查。即使在MQ 7.1和7.5中,CHLAUTH规则也可以覆盖用于OAM检查的SVRCONN通道的MCAUSER值。