2013-04-30 3 views
0

Есть ли возможность изменить порядок очередей, не используя поле «Resequencer»? Может быть, это можно сделать с помощью JMS-клиента, чтобы вместо последнего получить последнее сообщение в очереди?Заказ ActiveMQ LIFO?

ответ

1

Я думаю, что вы должны дать больше информации о том, чего вы пытаетесь достичь ... В любом случае, если вы прочитаете спецификации некоторых реализаций JMS, таких как MQ, вы увидите, что заказ FIFO не гарантируется на 100% , Это означает, что если вы передадите порядок сообщений, вы можете легко попасть в неприятности. Рекомендуется добавить прогрессивный номер в заголовок сообщения и использовать его для обработки сообщений по вашему усмотрению. Если вы примете это решение, у вас есть 2 варианта для достижения своей цели: 1) изменить бизнес-логику получателя, чтобы проверить заголовок сообщения; 2) (возможно, более чистый подход, если вы используете MQ) используйте что-то, называемое СООБЩЕНИЕ СЕКЦИИ.

Редактор сообщений разрешает поиск на основе контента определенных сообщений с использованием функций SQL92-запроса. MQ спецификация состояние:

  • Сообщение JMS обеспечивает средство, чтобы обеспечить определенный пользователем метаданные в заголовок сообщения JMS (вне фактического тела сообщения).

  • JMS программы могут воспользоваться этого объекта для выбора подмножества
    сообщений на основе критерия выбора или, другими словами, клиент имеют JMS
    можно выбрать только те сообщения, которые он заинтересован в.

Вот еще информация о реализации двух решений ... свойство, вы, вероятно, интересует, и что вы должны установить перед отправкой сообщения является JMSCorrelationID, который будет установлен в 1 для первого сообщения , 2 для второго и т. Д.

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

http://activemq.apache.org/maven/apidocs/org/apache/activemq/ActiveMQQueueBrowser.html

2) Селектор сообщений. Ваше сообщение Селектор будет SQL строка, как: JMSCorrelationID = макс (JMSCorrelationID)

Если вы хотите реализовать селектор сообщения в Java синтаксис:

MessageConsumer потребитель = session.createConsumer (назначения, messageSelectorString, правда); ActiveMQObjectMessage objMsg = (ActiveMQObjectMessage) consumer.receiveNoWait();

+0

Andrea R1, спасибо, что ответьте. У меня очередь с 100 сообщениями внутри, и я хочу обработать ее как стек. Например, сообщения поступают в очередь в порядке: 1, 2, 3 ... 99. Но я хочу вернуть его в обратном порядке (не строгий, а наоборот), например: 98, 99, 97 .. 2, 1. I не знаю, как написать этот селектор: «MAX (timestamp)» –

+0

По определению очередь предназначена для операций FIFO. Чтобы отменить порядок, нажмите все содержимое в стек, а затем вытащите элементы из стека по мере необходимости. –