Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ibm mq 在云上连接到IBM MQ的问题_Ibm Mq - Fatal编程技术网

Ibm mq 在云上连接到IBM MQ的问题

Ibm mq 在云上连接到IBM MQ的问题,ibm-mq,Ibm Mq,在IBM云上创建了一个IBM MQ,并尝试连接IBM提供的JMS客户端。授权失败 同样的程序也适用于我的本地队列管理器。任何见解都将有助于我在云上探索IBM MQ 环境=JDK 1.8 MQ客户端Jar=9 我给了应用程序用户名/API密钥,不确定为什么它没有连接 遵循IBM文档 异常跟踪 Exception in thread "main" com.ibm.msg.client.jms.DetailedJMSSecurityRuntimeException: JMSWMQ2007:

在IBM云上创建了一个IBM MQ,并尝试连接IBM提供的JMS客户端。授权失败

同样的程序也适用于我的本地队列管理器。任何见解都将有助于我在云上探索IBM MQ

  • 环境=JDK 1.8
  • MQ客户端Jar=9
我给了应用程序用户名/API密钥,不确定为什么它没有连接

遵循IBM文档

异常跟踪

Exception in thread "main" 

com.ibm.msg.client.jms.DetailedJMSSecurityRuntimeException: JMSWMQ2007: Failed to send a message to destination 'RequestQ'.
JMS attempted to perform an MQPUT or MQPUT1; however IBM MQ reported an error.
Use the linked exception to determine the cause of this error.
    at com.ibm.msg.client.jms.DetailedJMSSecurityException.getUnchecked(DetailedJMSSecurityException.java:270)
    at com.ibm.msg.client.jms.internal.JmsErrorUtils.convertJMSException(JmsErrorUtils.java:173)
    at com.ibm.msg.client.jms.internal.JmsProducerImpl.send(JmsProducerImpl.java:633)
    at com.ibm.mq.samples.jms.JmsPutGet.main(JmsPutGet.java:122)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
/*
*(c)版权所有IBM Corporation 2018
*
*根据Apache许可证2.0版(以下简称“许可证”)获得许可;
*除非遵守许可证,否则不得使用此文件。
*您可以通过以下方式获得许可证副本:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*除非适用法律要求或书面同意,软件
*根据许可证进行的分发是按“原样”进行分发的,
*无任何明示或暗示的保证或条件。
*请参阅许可证以了解管理权限和权限的特定语言
*许可证下的限制。
*/
包com.ibm.mq.samples.jms;
导入javax.jms.Destination;
导入javax.jms.JMSConsumer;
导入javax.jms.JMSContext;
导入javax.jms.jmsception;
导入javax.jms.JMSProducer;
导入javax.jms.TextMessage;
导入com.ibm.mq.constants.MQConstants;
导入com.ibm.msg.client.jms.JmsConnectionFactory;
导入com.ibm.msg.client.jms.JmsConstants;
导入com.ibm.msg.client.jms.JmsFactoryFactory;
导入com.ibm.msg.client.wmq.WMQConstants;
/**
*用于点对点消息传递的最小且简单的应用程序。
*
*应用程序使用固定文字,任何自定义都需要
*重新编译此源文件。应用程序假定命名队列
*在运行之前为空。
*
*注:
*
*API类型:JMS API(v2.0,简化域)
*
*消息传递域:点对点
*
*提供程序类型:IBM MQ
*
*连接方式:客户端连接
*
*正在使用的JNDI:否
*自述文件-兼容模式
*  
*/
公共类JmsPutGet{
//系统退出状态值(假定未设置值为1)
私有静态int status=1;
私有静态最终字符串HOST=“ibm主机名”;//主机名或IP地址
private static final int PORT=32442;//队列管理器的侦听器端口
私有静态最终字符串CHANNEL=“xxx.APP.SVRCONN”//.APP.SVRCONN”///频道名称
私有静态最终字符串QMGR=“QMxxx”//队列管理器名称
私有静态最终字符串APP_USER=“appusername”;//应用程序用于连接MQ的用户名
私有静态最终字符串APP_PASSWORD=“IBM API Key”;//应用程序用于连接MQ的密码
private static final String QUEUE_NAME=“TestRequestQ”;//应用程序用于向和从中放置和获取消息的队列
/**
*主要方法
*
*@param args
*/
公共静态void main(字符串[]args){
//变数
JMSContext context=null;
目的地=空;
JMSProducer producer=null;
JMSConsumer consumer=null;
试一试{
//创建一个连接工厂
JmsFactoryFactory ff=JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
JmsConnectionFactory cf=ff.createConnectionFactory();
//设置属性
cf.setStringProperty(WMQConstants.WMQ_主机名,主机);
cf.setIntProperty(WMQConstants.WMQ_端口,端口);
cf.setStringProperty(WMQConstants.WMQ_通道,通道);
cf.setIntProperty(WMQConstants.WMQ_连接模式,WMQConstants.WMQ_CM_客户端);
cf.setStringProperty(WMQConstants.WMQ_队列管理器,QMGR);
cf.setStringProperty(WMQConstants.WMQ_应用程序名,“JmsPutGet(JMS)”;
cf.setBooleanProperty(WMQConstants.USER\u AUTHENTICATION\u MQCSP,true);
cf.setStringProperty(WMQConstants.USERID,应用程序用户);
cf.setStringProperty(WMQConstants.PASSWORD、APP_PASSWORD);
/*cf.setBooleanProperty(JmsConstants.USER\u AUTHENTICATION\u MQCSP,false)*/
/*cf.setBooleanProperty(MQConstants.USE_MQCSP_AUTHENTICATION_属性,false)*/
/*cf.setBooleanProperty(“WMQConstants.USER\u AUTHENTICATION\u MQCSP”,false)*/
//创建JMS对象
context=cf.createContext();
destination=context.createQueue(“队列://”+队列名称);
long uniqueNumber=System.currentTimeMillis()%1000;
TextMessage=context.createTextMessage(“你今天的幸运号码是”+uniqueNumber);
producer=context.createProducer();
发送(目的地、消息);
System.out.println(“发送的消息:\n”+消息);
consumer=context.createConsumer(目标);//可自动关闭
String receivedMessage=consumer.receiveBody(String.class,15000);//以毫秒或15秒为单位
System.out.println(“\n收到的消息:\n”+收到的消息);
记录成功();
}捕获(jmsex异常jmsex){
记录失败(jmsex);
}
系统退出(状态);
}//结束main()
/**
*将此运行记录为成功。
*/
私有静态void recordSuccess(){
System.out.println(“成功”);
状态=0;
返回;
}
/**
*将此运行记录为失败。
*
*@param-ex
*/
私有静态无效记录失败(例外情况ex){
如果(ex!=null){
if(jmscexception的exinstanceof){
processJMSException((JMSException)ex);
}否则{
系统输出打印项次(ex);
}
}
系统输出打印项次(“失败”);
状态=-1;
返回;
}
/**
*处理JMSException和任何相关的内部异常。
*
*@param jmsex
*/
私有静态无效进程JMSException(JMSException jmsex){
System.out.println(jmsex);
Throwable innerException=jmsex.getLinkedException();
if(innerException!=null){
System.out.println(“内部异常:”;
}
while(innerException!=null){
System.out.println(内部异常);
innerException=innerException.getCause();
}
返回;
}

}
最可能的原因可能是试图通过“CLOUD.APP.SVRCONN”通道获取/放入队列中的消息的用户没有正确的访问权限。默认情况下,通道身份验证记录可能阻止该用户获取/PU