Spring集成-IBM MQ-使用队列中的大消息 [英] Spring Integration - IBM MQ - Consuming large messages from Queue

查看:587
本文介绍了Spring集成-IBM MQ-使用队列中的大消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在使用spring集成来连接到IBM MQ V7.5,以从队列中读取消息.我们偶尔会收到大条消息以供阅读. SI jms适配器无法读取大消息,但适用于较小的消息.以下是我们得到的例外情况

We are using spring integration to connect to IBM MQ V7.5 to read messages from queue. We occasionally get large messages to read. SI jms adapter fails to read to large message, but it works for smaller messages. Below is the exception we are getting

23:18:35,470  WARN DefaultMessageListenerContainer:839 - Setup of JMS message listener invoker failed for destination 'queue:///Cis.Orders' - trying to recover. Cause:
JMSWMQ2002: Failed to get a message from destination 'XXX'.; 
nested exception is com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '1' ('MQCC_WARNING') reason '2080' ('MQRC_TRUNCATED_MSG_FAILED').
com.ibm.msg.client.jms.DetailedMessageEOFException: JMSWMQ2002: Failed to get a message from destination 'Cis.Orders'.
WebSphere MQ classes for JMS attempted to perform an MQGET; however WebSphere MQ reported an error.
Use the linked exception to determine the cause of this error.
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:524)
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:216)
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:124)
at com.ibm.msg.client.wmq.internal.WMQConsumerShadow.getMsg(WMQConsumerShadow.java:1376)
at com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow.receiveInternal(WMQSyncConsumerShadow.java:227)
at com.ibm.msg.client.wmq.internal.WMQConsumerShadow.receive(WMQConsumerShadow.java:1109)
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.receive(WMQMessageConsumer.java:460)
at com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receiveInboundMessage(JmsMessageConsumerImpl.java:766)
at com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receive(JmsMessageConsumerImpl.java:474)
at com.ibm.mq.jms.MQMessageConsumer.receive(MQMessageConsumer.java:212)
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:430)
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:310)
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1102)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1094)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:991)
at java.lang.Thread.run(Thread.java:662)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '1' ('MQCC_WARNING') reason '2080' ('MQRC_TRUNCATED_MSG_FAILED').
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:204)
... 15 more

任何帮助将不胜感激.谢谢您的宝贵时间.

Any help would be appreciated. Thanks for your time.

推荐答案

JMS客户端永远不要返回MQRC_TRUNCATED_MSG_FAILED,因为您对使用的缓冲区大小没有任何物理控制,并且此错误表示接收缓冲区太小而无法接收消息.

The JMS client shouldn't ever return MQRC_TRUNCATED_MSG_FAILED, as you don't have any physical control over the buffer sizes in use, and this error indicates the receive buffer was too small to receive the message.

要知道没有完整的异常堆栈,也不知道当前版本是很难的,但是您可以尝试升级到最新的MQ 7.5修订包7.5.0.3.

It's difficult to tell without the full exception stack, and without knowing your current version, but you could try upgrading to 7.5.0.3, the newest MQ 7.5 fix pack.

或者您可以在IBM支持下打开PMR进行调查.

Or you could open a PMR with IBM support to investigate.

这篇关于Spring集成-IBM MQ-使用队列中的大消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆