Фильтрация в JMS на основе содержимого тела
Я реализую модель Pub/Sub с использованием JMS. Я отправляю сообщение из Pub всем подписчикам. Я хочу, чтобы подписчики получали отфильтрованные сообщения на основе какой-либо строки в фактическом теле сообщения.
Например, подписчик подписывается на тему "спорт" и должен получать только те сообщения, в которых есть текст "крикет" в тексте сообщения.
ps Я не хочу использовать селекторы сообщений.
Как я могу это реализовать.
Спасибо и С уважением.
3 ответа
Вы не можете использовать механизм фильтрации сообщений по теме на основе содержимого тела сообщения. Обычно JMS Selector используется для фильтрации сообщений, но даже это не работает для Body Contents:
Селектор сообщений не может выбирать сообщения на основе содержимого тела сообщения.,
Проблема здесь в том, что вы должны сначала получить (то есть потребить) сообщение, а затем извлечь его содержимое, что исключает случай любого вида фильтрации тела.
Посмотрите на верблюда апачей. Он предоставляет средства маршрутизации и фильтрации сообщений и имеет отличную интеграцию с Active MQ.
Вы не можете сделать это с самой JMS.
Обычно вы заставляете отправляющее приложение использовать разные очереди в зависимости от типа сообщения (заказы, перспективы клиентов, счета-фактуры, отчеты о состоянии или еще много чего). Если вы не хотите использовать отдельные очереди, вы можете по крайней мере заставить отправляющее приложение пометить сообщение некоторым свойством, которое можно отфильтровать с помощью селектора.
В некоторых случаях, когда вам все еще необходимо выполнять маршрутизацию и / или фильтрацию на основе фактического содержимого сообщения, для такого рода вещей существует специальное программное обеспечение. Apache Camel и Mule ESB - это два варианта.