Ответ 1
До сих пор я знаю, что это называется доставкой "вне порядка" и является частью атрибутов качества обслуживания (QoS) системы JMS. Я не думаю, что это часть спецификации JMS, но некоторые провайдеры ее поддерживают. Это будет зависеть от конкретной реализации JMS, которую вы используете.
Обратите внимание, однако, что JMS предназначена для распространения сообщений нескольким потребителям, чтобы распределить нагрузку. Если сообщение должно быть доставлено упорядоченным способом, это невозможно - это в основном приводит к сериализации доставки сообщений, и сообщение не может быть обработано одновременно.
wikipedia говорит лучше меня:
Очередь JMSПромежуточная область, содержащая сообщения, которые были отправлены, и ожидая, чтобы его прочитали. Обратите внимание, что, в отличие от очереди имен предполагает, что сообщения не обязательно должны быть доставлен в отправленном порядке. Если управляемый сообщением пул bean содержит больше чем один экземпляр, тогда сообщения могут быть обрабатывается одновременно и, следовательно, возможно, что более позднее сообщение обрабатывается раньше, чем раньше. Очередь JMS гарантирует только то, что каждый сообщение обрабатывается только один раз.
Запрос на отмену вне диапазона нелегко достичь с помощью JMS. Две идеи:
- Сохранять билет, который соответствует каждому сообщению в базе данных, может использоваться для отмены сообщения. Когда сообщение доставляется, MDB проверяет, действительно ли соответствующий билет остается в силе. Если да, продолжайте дальше, если нет, отпустите сообщение.
- Попробуйте установить размер пула MDB на единицу. Возможно, в этом случае доставка будет заказана. Изменение размера пула - это приложение. сервер, но большинство из них поддерживают размер пула bean.
В противном случае, возможно, посмотрите на хранилище сообщений. Это все равно стоит проверить EAI.