JMS - Как селекторы сообщений работают с несколькими пользователями очередей и тем? - PullRequest
8 голосов
/ 13 мая 2010

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

Например, вы определяете свойство для перехода в заголовок вашего сообщения JMS с именем targetConsumer. Селектор сообщений, который вы применяете к потребителю, известному как A, выглядит как WHERE targetConsumer = 'CONSUMER_A'.

Понятно, что потребитель A теперь будет просто захватывать сообщения с установленным свойством, как в примере. Будут ли осведомлены об этом другие потребители? IOW, получит ли другой потребитель, не связанный с селектором сообщений, сообщения CONSUMER_A, если он просматривает очередь перед получателем A? Нужно ли применять селекторы сообщений, например, WHERE targetConsumer <> 'CONSUMER_A' к другим?

Я сейчас работаю с RTFM и собираю эмпирические данные, но надеялся, что кто-то может знать об этом.

Ответы [ 3 ]

6 голосов
/ 13 мая 2010

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

В случае управляемых сообщениями компонентов (потребителя сообщений JMS) селектор может быть указан в файле ejb-jar.xml, что позволяет выполнять настройку во время развертывания (вместо противоположного представления). указания селектора сообщений во время разработки).

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

0 голосов
/ 13 июня 2017

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

Более формально: не должно существовать ни одного сообщения, соответствующего двум селекторам в одной очереди

Это еще один недостаток очередей по сравнению с темами - на практике вы всегда должны сначала рассмотреть возможность использования тем. С темой каждый соответствующий потребитель получает сообщение.

0 голосов
/ 13 июня 2017

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

...