javax.jms.JMSException:MQJMS2002:无法从MQ队列获取消息

时间:2011-11-30 10:03:43

标签: java jms ibm-mq

我有一个异步JMS接收器编码(明显的细节遗漏):

connection = connectionFactory.createConnection();
connection.setExceptionListener(new ExceptionListener() {
    @Override
    public void onException(JMSException ex) {
        logger.info("JMS exception " + ex.getMessage());
    }
});

session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
consumer = session.createConsumer(queue);
consumer.setMessageListener(listener);
logger.info("Waiting for a message");
connection.start();

一切都很好地启动,但是当消息到达时,我得到一个ExceptionListener选中的JMSException。例外情况说:

javax.jms.JMSException: MQJMS2002: failed to get message from MQ queue.
at com.ibm.msg.client.wmq.v6.jms.internal.ConfigEnvironment.newException(ConfigEnvironment.java:374)
at com.ibm.msg.client.wmq.v6.jms.internal.MQMessageConsumer.getMessage(MQMessageConsumer.java:3047)
at com.ibm.msg.client.wmq.v6.jms.internal.MQMessageConsumer.receiveAsync(MQMessageConsumer.java:4042)
at com.ibm.msg.client.wmq.v6.jms.internal.SessionAsyncHelper.run(SessionAsyncHelper.java:507)
at java.lang.Thread.run(Thread.java:662)

链接的异常只是说NullPointerException并且没有提供其他细节。

我已经在网上寻找答案,但我不是MQ专家,而且无处可去。这里的中间件人员不是很有帮助,让他们做任何事都证明是缓慢而痛苦的。我得到的印象是它与队列配置有关,但我觉得我抓着吸管。

如果有人有任何建议,我将不胜感激 - 特别是如果这是我可以武装自己并面对中间件的事情:)

我正在使用MQ 7.0.0.2客户端jar。

3 个答案:

答案 0 :(得分:1)

令人尴尬的是,我刚刚发现我跳过的一些“明显”代码中有一个finally块,它在打开后不久就关闭了连接。不知道为什么错误信息必须如此含糊 - 告诉我连接已关闭会让我节省数小时的时间。

感谢那些花时间阅读我的问题的人!

答案 1 :(得分:1)

除了异常外,可能还有一个MQ原因代码。这可能对节省您的时间非常有帮助。

答案 2 :(得分:0)

IBM网站上的

This support link似乎与您的问题相关。虽然它提到版本6而不是7,但堆栈跟踪与行号相似。显然,原因是XML中出现的属性用于封装标题信息。

客户端是否使用与Websphere MQ服务器实例相同的版本?您可能需要说服中间件人员升级到至少7.0.1.0并安装最新的修订包,然后确保使用适合该版本的客户端jar。从7.0.1.0开始,已经修复了标头解析。