Apache верблюд - Как использовать activemq Выборочный потребитель, используя тело сообщения - PullRequest
0 голосов
/ 06 июня 2019

Мне нужны два потребителя с единственной очередью activemq, и они хотят фильтровать во время потребления.Выборочный вариант - лучший вариант для меня (пожалуйста, предложите, если есть другие).Но отправитель не отправляет мне какой-либо параметр заголовка или какое-либо свойство, выборочный работает только с заголовком или свойствами, теперь я хотел отфильтровать сообщение по телу сообщения.Есть ли способ использовать селективный с телом сообщения

Мои два сообщения различаются по test и test2

{
   "test":{
      "abc":"123",
      "cde":"123"     
   }
}





{
   "test2":{
     "abc":"321",
     "cde":"321"
   }
}

Я хочу что-то вроде селективного с телом сообщения

from("jms:selective?selector=" + java.net.URLEncoder.encode(${body.test})).
    to("cxf:bean:replica01");

from("jms:selective?selector=" + java.net.URLEncoder.encode(${body.test2})).
    to("cxf:bean:replica02");

Пожалуйста, предложите, если есть какой-либо способ сделать это.

1 Ответ

1 голос
/ 06 июня 2019

Как указывает документация селектора для ActiveMQ 5.x , вы можете использовать селекторы на основе XPath для сообщений, имеющих тела XML. Тем не менее, тела ваших сообщений не являются XML, так что, похоже, в любом случае не будет возможности, которую вы ищете.

Имейте в виду, что для брокера тело сообщения - это просто массив байтов, тогда как заголовки / свойства сообщения набираются, что позволяет выполнять такие операции сравнения, которые делают селекторы жизнеспособными.

...