首页 > 解决方案 > Apache camel - 如何使用消息体使用 activemq 选择性消费者

问题描述

我想要两个具有单个 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");

请建议是否有任何方法可以这样做。

标签: apache-camelactivemq

解决方案


正如ActiveMQ 5.x 的选择器文档所指出的,您可以将基于 XPath 的选择器用于具有 XML 主体的消息。但是,您的消息正文不是 XML,因此似乎无论如何都无法获得您正在寻找的功能。

请记住,就代理而言,消息的主体只是一个字节数组,而消息头/属性是类型化的,它允许进行使选择器可行的比较操作。


推荐阅读