Пользовательский опрос против JMS MessageListener

Извините, если это дублирующий вопрос.

У меня есть устаревшее веб-приложение, которое использует очереди (да, обычная очередь Java) и настраиваемый опрос (каждые 500 мс). Будет вызвана веб-служба REST (/message), которая вернет сообщение, если в противном случае будет пустая строка.

Мне нужно: если какое-либо сообщение доступно в очереди в режиме реального времени, клиент должен получить это сообщение. Так что я могу сэкономить 500 мс.

Есть ли какие-либо преимущества в переходе на JMS по сравнению с текущим подходом? По этой ссылке JMS MessageConsumer messageListener выполняет push или pull? кажется, MessageListener (процесс асинхронный) использует опрос, который ничем не отличается от текущего подхода.

Если это основано на поставщике, как HornetQ/ActiveMQ поддерживает MessageListener?

РЕДАКТИРОВАТЬ: очередь используется для интеграции двух систем. Веб-приложение и автономная программа Java.


person jaks    schedule 14.01.2014    source источник


Ответы (2)


Либо получите, либо MessageListener будут асинхронными и будут вызываться, как только вы получите сообщение.

вы можете контролировать размер предварительной выборки вашего клиента.

Теперь, если все, что вам нужно, это избежать задержки полинга каждые 500 мс, использование системы очередей может быть излишним? Совершенно нормально использовать java.util.Queue (или любой другой подкласс).

Если все, что вам нужно, это блокировать до тех пор, пока элемент java.util.Queue не будет доступен, и вам не нужен распределенный обмен сообщениями, постоянство или что-то подобное, вы могли бы просто использовать BlockingDequeue, и ваш поток разблокируется, как только у вас есть сообщение ..

Посмотри на это:

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingDeque.html

person Clebert Suconic    schedule 14.01.2014
comment
Очередь используется для интеграции двух систем. Я хочу снизить нагрузку на сервер за счет опроса (примерно 10 тыс. опросов за 500 мс) - person jaks; 16.01.2014

Async MessageListener реализован с использованием модели, основанной на проталкивании. В ActiveMQ брокер отправляет клиенту ряд сообщений на основе установленного значения предварительной выборки, чтобы сообщения были готовы к использованию. Помогает ли это в вашем конкретном случае использования — это вопрос, на который вы должны ответить сами.

person Tim Bish    schedule 14.01.2014
comment
Есть идеи, как это реализовано в HornetQ? - person jaks; 16.01.2014
comment
На форуме HornetQ я обнаружил, что это тоже push-модель. Спасибо, Тим. - person jaks; 16.01.2014