【问题标题】:Connecting to MQ manager get MQ error 2495连接到 MQ 管理器得到 MQ 错误 2495
【发布时间】:2018-10-08 15:20:02
【问题描述】:

我们有一个应用程序在暂存中完全正常工作,但是当我们将其部署到生产环境时,我们收到 MQ 错误 2495。我们在 Tomcat 8.5 中运行该应用程序,并且使用相同的 MQ 库 (8.0.0.6)。服务器操作系统是 Windows。

从 MQ 读取消息的代码如下:

MQEnvironment.hostname = queueSettings.getServer();
        MQEnvironment.channel = queueSettings.getChannel();
        MQEnvironment.port = queueSettings.getPort();

        MQQueueManager queueManager = new MQQueueManager(queueSettings.getQueueManager());

        int openOptions = CMQC.MQCBDO_FAIL_IF_QUIESCING | CMQC.MQOO_INPUT_SHARED | CMQC.MQOO_BROWSE;

        MQQueue queue = queueManager.accessQueue(queueSettings.getQueue(), openOptions);

错误的完整堆栈跟踪如下:

com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2495'.
at com.ibm.mq.MQSESSION.(MQSESSION.java:2063)
at com.ibm.mq.MQSESSION.getSession(MQSESSION.java:2103)
at com.ibm.mq.MQManagedConnectionJ11.(MQManagedConnectionJ11.java:207)
at com.ibm.mq.MQBindingsManagedConnectionFactoryJ11._createManagedConnection(MQBindingsManagedConnectionFactoryJ11.java:185)
at com.ibm.mq.MQBindingsManagedConnectionFactoryJ11.createManagedConnection(MQBindingsManagedConnectionFactoryJ11.java:230)
at com.ibm.mq.StoredManagedConnection.(StoredManagedConnection.java:96)
at com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:194)
at com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:758)
at com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:706)
at com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:670)
at com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:145)
at com.ibm.mq.MQQueueManager.(MQQueueManager.java:675)
at com.atlascopco.cpq.connections.MQConnection.readMessagesFromQueue(MQConnection.java:92)
at com.atlascopco.cpq.tasks.ResponseHandlerTask.run(ResponseHandlerTask.java:43)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2495;AMQ8568: The native JNI library 'mqjbnd64' was not found. For a client installation this is expected. [3=mqjbnd64]
at com.ibm.mq.jmqi.local.LocalMQ.loadLib(LocalMQ.java:1202)
at com.ibm.mq.jmqi.local.LocalMQ$1.run(LocalMQ.java:272)
at java.security.AccessController.doPrivileged(Native Method)
at com.ibm.mq.jmqi.local.LocalMQ.initialise_inner(LocalMQ.java:260)
at com.ibm.mq.jmqi.local.LocalMQ.initialise(LocalMQ.java:223)
at com.ibm.mq.jmqi.local.LocalMQ.(LocalMQ.java:1255)
at com.ibm.mq.jmqi.local.LocalServer.(LocalServer.java:219)
at sun.reflect.GeneratedConstructorAccessor10933.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.ibm.mq.jmqi.JmqiEnvironment.getInstance(JmqiEnvironment.java:656)
at com.ibm.mq.jmqi.JmqiEnvironment.getMQI(JmqiEnvironment.java:590)
at com.ibm.mq.MQSESSION.(MQSESSION.java:2056)
... 15 common frames omitted
Caused by: java.lang.UnsatisfiedLinkError: no mqjbnd64 in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at com.ibm.mq.jmqi.local.LocalMQ.loadLib(LocalMQ.java:1146)
... 27 common frames omitted

如何找到问题?

【问题讨论】:

标签: java-8 ibm-mq tomcat8


【解决方案1】:

问题在于您的堆栈跟踪:

Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2495;AMQ8568: The native JNI library 'mqjbnd64' was not found. For a client installation this is expected. [3=mqjbnd64]
Caused by: java.lang.UnsatisfiedLinkError: no mqjbnd64 in java.library.path

这记录在 IBM MQ 知识中心页面“Configuring the Java Native Interface (JNI) libraries”上

在 Windows 上,库的默认位置如下:

MQ_INSTALLATION_PATH\java\lib (32-bit libraries)
MQ_INSTALLATION_PATH\java\lib64 (64-bit libraries)

您可以通过以下两种方式之一指定此库的位置(如果 MQ 安装在默认位置,以下两个示例都适用于 64 位 JRE,如果您正在运行 32 位 JRE,则使用 lib 目录而不是lib64目录):

  1. 带有 JVM 参数,例如:
    -Djava.library.path=C:\Program Files\IBM\MQ\java\lib64
  2. 通过操作系统环境变量。在 Windows 上使用:
    set PATH=C:\Program Files\IBM\MQ\java\lib64;%PATH%

【讨论】:

  • 我们试过这个,但没有任何运气。正确配置JNI库时弹出同样的错误。
  • 我手动将路径添加到 Windows 中的路径变量。所以这是正确的,cmd可以直接访问dll文件。
  • 没有双引号?您是否重新启动了 JRE?
  • 好的,重启后错误消失了。现在,当我们向 MQ 发送消息时,什么也没有发生。 Java 应用程序中没有抛出异常。
  • @JimmyD 你的意思是它现在正在工作吗?如果我的回答对您有帮助,请接受。如果它不工作是什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 2017-02-03
  • 2020-04-23
相关资源
最近更新 更多