JMS: оператор модуля в селекторе сообщений

Я хочу сбалансировать нагрузку сообщений JMS с помощью селекторов сообщений.

Сообщение имеет свойство "EntitiyIX".

Селекторы должны быть такими:

"EntitiyIX Modulus 2 == 0" ==> route to queue A
"EntitiyIX Modulus 2 != 0" ==> route to queue B

Какой оператор вычисляет модуль в селекторе сообщений JMS?

Спасибо, Алекс


person Alex    schedule 23.09.2010    source источник


Ответы (4)


Предполагая, что свойство является целым числом, я считаю, что вы могли бы сделать

  • (EntityIX/2) = ((EntityIX+1)/2) -> маршрут к A
  • (EntityIX / 2) != ((EntityIX+1) / 2) -> маршрут к B
person Robin    schedule 23.09.2010
comment
Значит: нет оператора модуля? - person Alex; 23.09.2010
comment
Не то, чтобы я мог сказать. Похоже, он поддерживает только основные операторы (+ - * /). У меня нет среды для тестирования. - person Robin; 23.09.2010

Согласно API (http://download.oracle.com/javaee/1.4/api/javax/jms/Message.html — прокрутите вниз до «Селекторы сообщений»), здесь нет оператора модуля.

То, что предложил @Robin, звучит правильно.

person Eran Harel    schedule 24.09.2010

Если вы хотите использовать более двух потребителей, попробуйте следующее:

Поместите обогащение контента перед получателем сообщения. Позвольте Content Enricher вычислить значение хеш-функции в диапазоне от нуля до единицы. Выберите простую и предсказуемую хеш-функцию. Для номера заказа вы можете разделить две последние цифры номера на 100. Сохраните это хэш-значение в сообщении, скажем, в свойстве X.

Затем вы должны настроить трех потребителей сообщений со следующими селекторами сообщений: «X ‹ 1/3», «1/3 ‹= X и X ‹ 2/3», «2/3 ‹= X».

Если вам разрешено изменять отправителя сообщения, добавьте свойство перед отправкой сообщения. В этом случае обогатитель контента является избыточным.

person rwitzel    schedule 13.11.2012

value=2 или любое целое число

EntityIX-((EntityIX/value)*value)=0 -> маршрут к А

EntityIX-((EntityIX/value)*value)<>0 -> маршрут к B

person rahul sahukar    schedule 11.07.2018