Как синхронизируется метод получения () jmstemplate? Отправитель отправляет сообщение брокеру, а с другой стороны потребитель получает сообщение из очереди брокера или темы. Для приема это будет поток опроса, ожидающий данных от брокера. Как тогда поддерживается синхронизация?
Синхронный прием JmsTemplate
comment
Когда функция receive() блокируется для ожидания сообщения, продолжает ли она опрос очереди или учитывает только один опрос на блокировку?
- person Muzammil   schedule 01.04.2015
Ответы (1)
JmsTemplate
за кулисами использует JMS API и, в частности, MessageConsumer
. Эта служба может либо попытаться получить Message
без ожидания (receiveNoWait
), либо ожидать настраиваемое количество времени (receive(long timeout)
). Когда он вызывается с таймаутом 0, метод получения блокируется до тех пор, пока не прибудет сообщение. В JmsTemplate
нет ничего, что касалось бы всего этого (т.е. это обеспечивается реализацией клиентского брокера).
Более обычный способ получения сообщений — использование контейнера прослушивателя. В Spring DefaultMessageListenerContainer
позволяет вам использовать опрос потока для обработки входящих сообщений. Ознакомьтесь с документацией jms по платформе Spring для получения дополнительной информации.
person
Stephane Nicoll
schedule
09.04.2014