【问题标题】:MQRC_NOT_AUTHORIZED error while connecting to IBM MQ using MQ JMS使用 MQ JMS 连接到 IBM MQ 时出现 MQRC_NOT_AUTHORIZED 错误
【发布时间】:2020-04-23 20:10:33
【问题描述】:

我无法从我的 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 工作正常。 我在这里错过了什么吗?

我阅读了与此错误相关的所有其他帖子并进行了一些研究,但我在任何地方都没有得到适当的解决方案,因此发布了这个问题。如果您需要更多详细信息,请告诉我

编辑:我无权访问 AMQERR01.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();

【问题讨论】:

  • 当 JMS 应用程序收到此错误时,TESTQUEUE 队列管理器的AMQERR01.LOG 文件中会显示什么错误?队列管理器是什么版本的 IBM MQ?用于 JMS jar 文件的 IBM MQ 类来自哪个版本?你如何连接?你打电话给createQueueConnection 还是createConnection。你传递任何参数吗?
  • 已添加请求的详细信息@JoshMc。谢谢
  • 如果您无权访问AMQERR01.LOG,请向 MQ 管理员询问此信息。客户端的 2035 是一个通用错误,可能有多种原因,队列管理器日志会告诉您具体原因是什么。
  • 如果代码未在 createQueueConnection 方法上设置 UserId(和可选密码),则 MQ 客户端库将使用运行应用程序的 UserId。
  • 客户端 jars(java 的 ibm mq 类)能够连接到通道但(jms 的 ibm mq 类)无法连接到同一通道的可能情况吗?这是可能和可行的方案吗?

标签: java jms ibm-mq


【解决方案1】:

最后,当我更改频道名称时,我解决了这个问题。 以前我的频道名称是 SYSTEM.DEF.SVRCONN。我已更改为其他一些频道名称(由管理团队的某个人创建。)所以基本上,问题是频道无权连接。

【讨论】:

  • 默认情况下,IBM MQ 阻止对所有 SYSTEM. * 通道的访问。让 MQ 管理员检查 AMQERR01.LOG 应该立即指出这一点。
  • 是的..我可以访问管理日志..所以经过多次点击和试验,更改频道名称解决了问题。
【解决方案2】:

如果您省略 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!");

【讨论】:

  • 如果我遗漏了用户身份验证,那么我会收到一些其他错误,但它不起作用。我更改了频道名称,现在可以正常使用了。
  • 它是 SYSTEM.DEF.SVRCONN.. 我已更改为其他频道并开始工作。当我尝试使用默认通道时,MQ 资源管理器也给了我同样的错误。
猜你喜欢
  • 2011-07-03
  • 2013-04-06
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多