Синхронный прием JmsTemplate

Как синхронизируется метод получения () jmstemplate? Отправитель отправляет сообщение брокеру, а с другой стороны потребитель получает сообщение из очереди брокера или темы. Для приема это будет поток опроса, ожидающий данных от брокера. Как тогда поддерживается синхронизация?


person ashishgupta_mca    schedule 16.07.2013    source источник
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