Как упоминал Мартин, по умолчанию большинство реализаций JMS будут обрабатывать селекторы сообщений на клиенте, , если они не являются частью длительной подписки, когда большинство реализаций JMS будут обрабатывать их в сервера, чтобы избежать сохранения слишком большого количества сообщений, когда количество сообщений, прошедших через селектор, значительно сократилось. Некоторые системы (например, SonicMQ) позволяют указывать, что селекторы сообщений должны обрабатываться на сервере, что является хорошим вариантом в случае, когда у вас есть избыточный ЦП, доступный для ваших брокеров сообщений, но не для ваших потребителей.
Имейте в виду, что, хотя выбор по темам обычно происходит быстрее, он может быть довольно громоздким, потому что если вы хотите прослушать 5 разных вещей, у вас должно быть 5 разных MessageConsumers. Каждый из них в реализации наивного драйвера - это отдельный поток, и это может начать складываться. По этой причине часто полезно поддерживать как из публикации, так что некоторые клиенты могут слушать только темы, которые они хотят, а другие могут слушать иерархии тем, которые они хотят (например, foo. #), С помощью селекторов сообщений (или кода). на основе селекторов).
Однако, вы всегда должны проверять свое приложение и своего брокера . Каждый брокер по-разному справляется с ситуацией, а каждое приложение работает по-своему. Вы не можете просто сказать «всегда использовать технику X», потому что каждая техника для обработки сообщений, ориентированных на клиента, имеет разные компромиссы. Точка отсчета, эталон, эталон.
С селекторами сообщений следует помнить, что они не являются динамически изменяемыми, поэтому вы можете потерять сообщения или вручную управлять сложным сценарием переключения. Представьте себе следующий вариант использования:
- Вы прослушиваете селектор сообщений в форме (тикер в ('CSCO', 'MSFT'))
- Пользователь хочет начать слушать AAPL
- Вы должны закрыть старый MessageConsumer и запустить новый с помощью селектора в форме (Ticker in ('CSCO,' MSFT ',' AAPL '))
- Во время переключения вы либо теряете сообщения (потому что закрыли старое перед запуском нового), либо вам приходится вручную удалять дубликаты (потому что у вас новый запущен раньше старого)