我需要一种方法来使用来自多个activemq jms队列的消息。
根据activemq文档,它支持wildcard consumers
我使用camel作为消息传递总线。是否可以查看下面的命名队列
aaa.processQueue
bbb.processQueue
ccc.processQueue
通过配置camel路由来查看activemq:*.processQueue
端点?
另外请告诉我,如果有更清洁的选择。
答案 0 :(得分:5)
是。它应该是可行的,因为Camel正在使用OpenWire / JMS客户端。
您的选择是:
from("activemq:*.processQueue")
from("activemq:aaa.processQueue,bbb.processQueue,ccc.processQueue")
具有逻辑子路由的多条路由:
from("activemq:aaa.processQueue").to("direct:doProcess");
from("activemq:bbb.processQueue").to("direct:doProcess");
from("activemq:ccc.processQueue").to("direct:doProcess");
from("direct:doProcess").whatever..
通过这种方式,您可以轻松打开/关闭路线以及将更多消费者分配给其中一个,因为您需要在aaa.processQueue
消息上优先于其他消息。
答案 1 :(得分:0)
他们的github上有一个使用通配符的routebuilder示例:
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
// use wildcard to consume from all sports
from("activemq:queue:sport.>")
.to("log:received?showHeaders=true")
.choice()
// the JMSDestination contains from which queue the message was consumed from
.when(header("JMSDestination").isEqualTo("queue://sport.pl.chelsea"))
.to("mock:chelsea")
// we can use a reg exp to match any message from 1st division
.when(header("JMSDestination").regex("queue://sport.1st.*"))
.to("mock:1st")
.otherwise()
.to("mock:other")
.end();
}
};
}