JMS Обменивающаяся сообщениями Производительность: много Тем/Очередей по сравнению с Обширной Фильтрацией (передают Селекторы),

Используйте этот код, чтобы найти запись между двумя датами, используя $gte и $lt:

db.CollectionName.find({"whenCreated": {
    '$gte': ISODate("2018-03-06T13:10:40.294Z"),
    '$lt': ISODate("2018-05-06T13:10:40.294Z")
}});
23
задан James 25 February 2009 в 21:19
поделиться

5 ответов

Как Martin упомянул значением по умолчанию, большинство реализаций JMS обработает селекторы сообщения на клиенте, если они не будут частью длительной подписки, когда большинство реализаций JMS обработает их на сервере также для предотвращения слишком многих сообщений, сохраняемых, когда будет значительное сокращение количества сообщений, которые заканчивают селектор. Некоторые системы (как SonicMQ) позволяют Вам указывать, что селекторы сообщения должны быть обработаны на сервере, который является хорошим вариантом в случае, где Вы имеете избыточный ЦП в наличии на своих брокерах сообщений, но не на Ваших потребителях.

Примите во внимание что, в то время как основанный на теме выбор обычно быстрее, это может быть довольно громоздким, потому что, если Вы хотите слушать 5 разных вещей, у Вас должно быть 5 различных MessageConsumers. Каждый из тех, которые в наивной реализации драйвера, является различным потоком, и это может начать складывать. По этой причине часто полезно поддерживать обоих из публикации так, чтобы некоторые клиенты могли послушать только темы, которые они хотят, и другие могут слушать иерархии темы, которые они хотят (например, нечто #) с селекторами сообщения (или основанными на коде селекторами).

Однако необходимо всегда тестировать против приложения и брокера. Каждый брокер обрабатывает ситуацию по-другому и каждый прикладные функции по-другому. Вы не можете только сказать "всегда метод использования X", потому что каждая техника для направленной клиентами обработки сообщения имеет различные компромиссы. Сравнительный тест, сравнительный тест, сравнительный тест.

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

  1. Вы слушаете селектор сообщения формы (Тикер в ('директор по логистике', 'MSFT'))
  2. Пользователь хочет начать слушать AAPL
  3. Необходимо закрыть старый MessageConsumer и запустить новый с селектора в форме (Тикер в ('директор по логистике ', MSFT', 'AAPL'))
  4. Во время переключения Вы любой теряет сообщения (потому что Вы закрываете старый прежде, чем запустить новый), или необходимо вручную удалить дубликаты (потому что у Вас есть новый, запущенный перед старым),
20
ответ дан 29 November 2019 в 02:22
поделиться

Другая реализация, но я проведу разговор, который я имел с высокоуровневым архитектором для продуктов BEA JMS. Я упомянул, что использовал селекторы, и он прокомментировал что-то вроде "штрафа, если Вы не хотите, чтобы он работал".

Наше приложение делало 10-е сообщений/секунда. Он, вероятно, привык к наблюдению жестких проблем с 100 1000-ми в секунду. Если Вы не будете в тех более высоких диапазонах или имеете действительно медленные аппаратные средства, или многие очереди/темы или селекторы будут, вероятно, работать хорошо.

На точке Дона о JMS том, чтобы быть простым в использовании... Мы перешли с оберткой к абстрактным вещам. Как только Вы входите в проблемы как устойчивое повторное соединение и правильно контакт со слушателями многопоточности / асинхронными слушателями, существует много неправильных способов написать код. Это определенно стоило того для нас для обертывания деталей, таким образом, клиенты могли остаться невинными в большинстве деталей.

3
ответ дан John M 29 November 2019 в 02:22
поделиться

На основе моего опыта с реализацией JBoss MQ селекторы сообщения использовались клиентами для фильтрации сообщений. Очевидно, это означает, что каждое сообщение в Теме все еще переходит к каждому получателю, даже если они игнорируют его. С другой стороны, различные очереди и темы на сервере будут влиять на производительность сервера.

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

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

3
ответ дан Martin 29 November 2019 в 02:22
поделиться

Хм, у меня есть свои сомнения. JMS довольно прост в использовании. Я видел, который попробовали, и более легкое к использованию решение было более трудно использовать и багги.

2
ответ дан Don Branson 29 November 2019 в 02:22
поделиться

Мои два цента:

Я спросил меня точно тот же вопрос относительно ActiveMQ.

  • Во-первых, я не использовал селекторы и создал много тем. Производительность была ужасна, поскольку брокер не мог обработать 100 тем без большого количества ресурсов.
  • затем я использовал комбинацию тем/селекторов. У меня теперь есть небольшое количество тем. Выбор работает хорошо. Но нагрузка не является очень большой, не больше, чем 10 сообщений/с

Я действительно разрабатывал уровень абстракции, позволяя разработчикам кодировать, не задавая вопросы, и мы сделали тесты путем переключения реализаций.

7
ответ дан 29 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: