Apache Camel是否支持activemq通配符使用者?

时间:2014-08-15 20:22:15

标签: apache-camel activemq wildcard consumer

我需要一种方法来使用来自多个activemq jms队列的消息。

根据activemq文档,它支持wildcard consumers

我使用camel作为消息传递总线。是否可以查看下面的命名队列

aaa.processQueue
bbb.processQueue
ccc.processQueue

通过配置camel路由来查看activemq:*.processQueue端点?

另外请告诉我,如果有更清洁的选择。

2 个答案:

答案 0 :(得分:5)

是。它应该是可行的,因为Camel正在使用OpenWire / JMS客户端。

您的选择是:

  1. from("activemq:*.processQueue")
  2. from("activemq:aaa.processQueue,bbb.processQueue,ccc.processQueue")
  3. 具有逻辑子路由的多条路由:

    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();
        }
    };
}

参考:https://github.com/apache/camel/blob/master/components/camel-jms/src/test/java/org/apache/camel/component/jms/activemq/ActiveMQConsumeWildcardQueuesTest.java