我需要一种从多个activemq jms队列中消费消息的方法。
根据activemq文档,它支持通配符消费者。
我正在使用camel作为消息总线。是否可以查看下面的命名队列?
aaa.processQueue
bbb.processQueue
ccc.processQueue
通过配置camel路由来查看activemq:*.processQueue
端点?
如果有更干净的替代方案,请让我知道。
我需要一种从多个activemq jms队列中消费消息的方法。
根据activemq文档,它支持通配符消费者。
我正在使用camel作为消息总线。是否可以查看下面的命名队列?
aaa.processQueue
bbb.processQueue
ccc.processQueue
通过配置camel路由来查看activemq:*.processQueue
端点?
如果有更干净的替代方案,请让我知道。
是的。由于Camel使用OpenWire/JMS客户端,因此应该可行。
你的选择如下:
from("activemq:*.processQueue")
from("activemq:aaa.processQueue,bbb.processQueue,ccc.processQueue")
Multiple routes with a sub route for logic:
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..
This way, you can easily turn on/off routes as well as assigning more consumers to one, given you need to have more priority on aaa.processQueue
messages than the rest.
JMSDestination
属性。 - Petter Nordlanderprotected 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();
}
};
}