Используйте этот код, чтобы найти запись между двумя датами, используя $gte
и $lt
:
db.CollectionName.find({"whenCreated": {
'$gte': ISODate("2018-03-06T13:10:40.294Z"),
'$lt': ISODate("2018-05-06T13:10:40.294Z")
}});
Как Martin упомянул значением по умолчанию, большинство реализаций JMS обработает селекторы сообщения на клиенте, если они не будут частью длительной подписки, когда большинство реализаций JMS обработает их на сервере также для предотвращения слишком многих сообщений, сохраняемых, когда будет значительное сокращение количества сообщений, которые заканчивают селектор. Некоторые системы (как SonicMQ) позволяют Вам указывать, что селекторы сообщения должны быть обработаны на сервере, который является хорошим вариантом в случае, где Вы имеете избыточный ЦП в наличии на своих брокерах сообщений, но не на Ваших потребителях.
Примите во внимание что, в то время как основанный на теме выбор обычно быстрее, это может быть довольно громоздким, потому что, если Вы хотите слушать 5 разных вещей, у Вас должно быть 5 различных MessageConsumers. Каждый из тех, которые в наивной реализации драйвера, является различным потоком, и это может начать складывать. По этой причине часто полезно поддерживать обоих из публикации так, чтобы некоторые клиенты могли послушать только темы, которые они хотят, и другие могут слушать иерархии темы, которые они хотят (например, нечто #) с селекторами сообщения (или основанными на коде селекторами).
Однако необходимо всегда тестировать против приложения и брокера. Каждый брокер обрабатывает ситуацию по-другому и каждый прикладные функции по-другому. Вы не можете только сказать "всегда метод использования X", потому что каждая техника для направленной клиентами обработки сообщения имеет различные компромиссы. Сравнительный тест, сравнительный тест, сравнительный тест.
Одна вещь принять во внимание с селекторами сообщения состоит в том, что они не динамично изменяемы, таким образом, у Вас есть возможность потери сообщений или необходимости вручную управлять сложным сценарием переключения. Вообразите следующий вариант использования:
Другая реализация, но я проведу разговор, который я имел с высокоуровневым архитектором для продуктов BEA JMS. Я упомянул, что использовал селекторы, и он прокомментировал что-то вроде "штрафа, если Вы не хотите, чтобы он работал".
Наше приложение делало 10-е сообщений/секунда. Он, вероятно, привык к наблюдению жестких проблем с 100 1000-ми в секунду. Если Вы не будете в тех более высоких диапазонах или имеете действительно медленные аппаратные средства, или многие очереди/темы или селекторы будут, вероятно, работать хорошо.
На точке Дона о JMS том, чтобы быть простым в использовании... Мы перешли с оберткой к абстрактным вещам. Как только Вы входите в проблемы как устойчивое повторное соединение и правильно контакт со слушателями многопоточности / асинхронными слушателями, существует много неправильных способов написать код. Это определенно стоило того для нас для обертывания деталей, таким образом, клиенты могли остаться невинными в большинстве деталей.
На основе моего опыта с реализацией JBoss MQ селекторы сообщения использовались клиентами для фильтрации сообщений. Очевидно, это означает, что каждое сообщение в Теме все еще переходит к каждому получателю, даже если они игнорируют его. С другой стороны, различные очереди и темы на сервере будут влиять на производительность сервера.
я сказал бы, что быстрое увеличение селекторов будет влиять на клиент & сетевая нагрузка и быстрое увеличение тем & очереди будут влиять на загрузку сервера. Очевидно, сетевая нагрузка, передайте потребительскую загрузку и обменивайтесь сообщениями, производитель загружают весь масштаб по-другому.
Вне простого случая, обертки становятся хитрыми; я рекомендовал бы обернуть обработку ошибок и API JMS в простой API передачи сообщений, концептуально структурированный для удовлетворения конкретных потребностей. Затем под покрытиями можно измениться на любой из различных проектов выше с минимумом суеты.
Хм, у меня есть свои сомнения. JMS довольно прост в использовании. Я видел, который попробовали, и более легкое к использованию решение было более трудно использовать и багги.
Мои два цента:
Я спросил меня точно тот же вопрос относительно ActiveMQ.
Я действительно разрабатывал уровень абстракции, позволяя разработчикам кодировать, не задавая вопросы, и мы сделали тесты путем переключения реализаций.