java - 使用 MQ JMS 连接到 IBM MQ 时出现 MQRC_NOT_AUTHORIZED 错误
问题描述
我无法从我的 java 客户端使用用于 JMS 的 MQ 类连接到 IBM MQ。错误日志说
com.ibm.msg.client.jms.DetailedJMSSecurityRuntimeException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'TESTQUEUE' with connection mode 'Client' and host name 'xxxx'
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
我没有任何凭据可提供,因为没有启用身份验证。我的其他应用程序正在尝试使用 Java 的 MQ 类连接到 IBM MQ 工作正常。我在这里错过了什么吗?
我阅读了与此错误相关的所有其他帖子并进行了一些研究,但我在任何地方都没有得到适当的解决方案,因此发布了这个问题。如果您需要更多详细信息,请告诉我
编辑: 我无权访问 AMKERR01.LOG/server 或 MQExplorer。
IBM MQ 队列管理器版本:8.0.0.11
JMS JAR 的 IBM MQ 类:com.ibm.mq.allclient-9.1.0.0.jar
代码示例:
jmsConFac.connectionsetIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
jmsConFac.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, false);
JMSContext context = jmsConFac.createContext();
解决方案
如果您省略 USER_AUTHENTICATION ,它会起作用吗?像这样的东西应该工作:
// Create a connection factory
JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
JmsConnectionFactory cf = ff.createConnectionFactory();
// Set the properties
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, host);
cf.setIntProperty(WMQConstants.WMQ_PORT, port);
//cf.setStringProperty(WMQConstants.WMQ_CHANNEL, channel);
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, queueManagerName);
// Create JMS objects
connection = cf.createConnection();
System.out.println("Connected!");
推荐阅读
- flutter - 在 Flutter 中,为什么没有 key 的无状态子节点仍然可以工作?
- keras - 如何以 conv1 作为第一层的 cnn 使用不同长度的数据?
- android - EXOPlayer 创建没有 URI 的播放列表
- pgadmin-4 - 打开时在 PGAdmin 4 中出错
- teradata - tera数据如何使用write_nos覆盖parquet文件
- node.js - 如何正确使用基于相同 mongo 架构的 2 个集合
- angular - 美国地图图表阴影
- node.js - 代码管道无法使用 sam 模板在 Lambda 中创建层
- sql - REGEXP_EXTRACT 值从左边第 4 到第 5 个下划线之间
- macos - 从 MacOS 上的进程访问 OneDrive 文件的权限被拒绝错误