【发布时间】:2018-06-21 20:33:55
【问题描述】:
鉴于我有 ActiveMQ 队列,其中已经存在许多消息。
当我将JmsTemplate 上的接收超时设置为RECEIVE_TIMEOUT_NO_WAIT 等于-1:
jmsTemplate.setReceiveTimeout(JmsTemplate.RECEIVE_TIMEOUT_NO_WAIT);
并尝试接收其中一条消息:
Message msg = jmsTemplate.receive(queueName);
那么msg就是null,但是不应该按照JavaDoc:
/**
* Timeout value indicating that a receive operation should
* check if a message is immediately available without blocking.
*/
public static final long RECEIVE_TIMEOUT_NO_WAIT = -1;
这是为什么呢?
当我这样做时:
jmsTemplate.setReceiveTimeout(1000);
然后检索消息。
【问题讨论】:
-
我怀疑随后的无等待调用将起作用(在第一个等待之后)。我刚刚查看了
ActiveMQMessageConsumer.receiveNoWait()方法,他发送了一个拉取请求,但是当然,该请求并没有立即得到满足,所以还没有消息。最终这些消息会到达,并且不等待选项应该会起作用。 -
看起来很奇怪..将
JmsTemplate从某个超时重新配置为RECEIVE_TIMEOUT_NO_WAIT有什么好处..我可以继续使用原始超时..我没有看到任何用例它:)
标签: spring jms spring-jms jmstemplate