Фильтрация в JMS на основе содержимого тела

Я реализую модель Pub/Sub с использованием JMS. Я отправляю сообщение из паба всем подписчикам. Я хочу, чтобы подписчики получали отфильтрованные сообщения на основе некоторой строки в фактическом теле сообщения.

Например, подписчик подписывается на тему «спорт» и должен получать только те сообщения, в тексте сообщения которых есть ключевое слово «крикет».

p.s. Я не хочу использовать селекторы сообщений.

Как я могу это реализовать.

Спасибо и С уважением.


person NGoyal    schedule 24.04.2013    source источник


Ответы (3)


Взгляните на апачский верблюд. Он предоставляет средства маршрутизации и фильтрации сообщений и отлично интегрируется с Active MQ.

person Nicholas    schedule 24.04.2013

Вы не можете использовать механизм фильтрации сообщений по теме на основе содержимого тела сообщения. Обычно для фильтрации сообщений используется селектор JMS, но даже это не работает для основного содержимого:

Из учебника по Java EE 6:

Селектор сообщений не может выбирать сообщения на основе содержания тела сообщения..

Проблема здесь в том, что вы должны сначала получить (то есть использовать) сообщение, а затем извлечь его содержимое, что исключает возможность какой-либо фильтрации тела.

person trikelef    schedule 24.04.2013

Вы не можете сделать это с самой JMS.

Что вы обычно делаете, так это заставляете приложение-отправитель использовать разные очереди в зависимости от типа сообщения (заказы, потенциальные клиенты, счета-фактуры, отчеты о состоянии или что-то еще). Если вы не хотите использовать отдельные очереди, вы можете, по крайней мере, заставить отправляющее приложение пометить сообщение некоторым свойством, которое вы можете отфильтровать с помощью селектора.

В некоторых случаях, когда вам все еще необходимо выполнять маршрутизацию и/или фильтрацию на основе фактического содержимого сообщения, для таких вещей существует специализированное программное обеспечение. Apache Camel и Mule ESB — два варианта.

person Petter Nordlander    schedule 26.04.2013
comment
Спасибо, Петтер, это, безусловно, было бы полезно. Я просто хочу уточнить, может ли JMS это сделать, и вы ответили на это. Я бы попробовал предложенные вами варианты. - person NGoyal; 29.04.2013