【发布时间】:2013-12-27 17:46:31
【问题描述】:
我有一个基于 Spring JMS 的客户端,它异步侦听 QUEUE1 上的“触发器”,它们表明有一条消息准备好在另一个队列 QUEUE2 上使用。
QUEUE2上的消费是通过JmsTemplate类完成的,配置如下:
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="gpyConnectionFactory" />
<property name="destinationResolver" ref="jndiDestinationResolver" />
<property name="receiveTimeout" value="100" />
</bean>
注意小的receiveTimeout。在负责这个应用程序之前,这个值已经是这样了。
现在,我注意到有时,特别是当 QUEUE2 包含相对较大的消息时,
来电
jmsTemplate.receiveSelectedAndConvert(destinationName, mqSelector);
检索一个NULL对象,所以很可能超时!
据我所知,正如 JMS 规范所述(如果我错了,请纠正我)超时只有在队列中没有可用消息时才会过期。 当前的情况让我相信,由于消息的大小以及肯定存在该队列的消息这一事实,超时到期是因为消费者没有足够的时间来阅读整个大消息。 这一切都可能吗?
提供者是 WebSphere MQ。
我肯定会设置一个更高的超时值。
【问题讨论】:
标签: timeout ibm-mq spring-jms