JMS: оператор модуля в селекторе сообщений - PullRequest
2 голосов
/ 23 сентября 2010

Я хочу загрузить баланс JMS-сообщений, используя селекторы сообщений.

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

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

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

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

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

Ответы [ 4 ]

1 голос
/ 24 сентября 2010

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

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

0 голосов
/ 11 июля 2018

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

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

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

0 голосов
/ 13 ноября 2012

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

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

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

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

0 голосов
/ 23 сентября 2010

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

  • (EntityIX / 2) = ((EntityIX + 1) / 2) -> маршрут до A
  • (EntityIX / 2)! = ((EntityIX + 1) / 2) -> маршрут до B
...