Учитывая, что у меня есть очередь 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()
, и он отправляет запрос на извлечение, но, конечно, этот запрос не выполняется сразу, поэтому сообщений пока нет. В конце концов, эти сообщения придут, и опция «не ждать» должна работать. - person Gary Russell   schedule 20.06.2018JmsTemplate
с некоторого тайм-аута наRECEIVE_TIMEOUT_NO_WAIT
.. Я могу просто продолжать использовать исходный тайм-аут.. Я не вижу для этого никакого варианта использования :) - person Patrik Mihalčin   schedule 21.06.2018