ActiveMQ, JMS темы и подписчики с селекторами - PullRequest
2 голосов
/ 05 августа 2011

Мне нужна помощь с темами и селекторами.

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

Это правильное поведение.

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

Моя настройка ActiveMq 5.5

есть какой-то вариант конфигурации, или это просто некорректный дизайн?

Ответы [ 3 ]

3 голосов
/ 05 августа 2011

Я бы сказал, что это ошибочный дизайн, поскольку есть лучшие альтернативы и, возможно, ошибка в ActiveMQ.

Первый вопрос: публикует ли ваш продюсер эту тему, устанавливая заголовок JMSExpiration для этих сообщений?

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

Что касается некорректного дизайна, в ту минуту, когда вы слышите, как вы говорите «Мне нужны надежные подписчики», и вы используете ActiveMQ, вам следует немедленно перейти к использованию виртуальных назначений. Виртуальные пункты назначения обладают темами, заключающимися в том, что производитель может отправлять сообщение в пункт назначения и распространять это сообщение среди N других пунктов назначения для потребления, но не имеет недостатков, связанных с наличием постоянных подписчиков на тему. Подробнее о Виртуальных направлениях здесь .

2 голосов
/ 06 августа 2011

Это связано с тем, как ActiveMQ обрабатывает разреженные селекторы. Текущая реализация не загружается в хранилище для поиска разреженных селекторов, совпадающих с сообщениями, поэтому вам нужно внести некоторые изменения в конфигурацию, чтобы попытаться обойти это. Вы можете установить maxBrowsePageSize в настроенной политике назначения, по умолчанию 400. См. page .

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

1 голос
/ 05 августа 2011

Это похоже на ошибку (или, по крайней мере, крайне неудобно), но есть обходной путь использования Виртуальных направлений .

Цитата:

Обратите внимание, что создание виртуальной темы добавляет небольшую нагрузку на ЦП при отправке сообщений в тему, но это довольно мало.Начиная с версии 5.4, отправка из виртуальных тем в очереди подписки может осуществляться с помощью selectorAware, так что фактически отправляются только те сообщения, которые соответствуют одному из существующих подписчиков.Использование этого параметра предотвращает создание несопоставленных сообщений, когда селекторы используются эксклюзивными потребителями.

...