2条骆驼路线消耗相同的队列

时间:2018-10-16 18:47:51

标签: apache-camel activemq-artemis

我已经在该地址内创建了多播地址FROM.TEXT和一个Anycast队列FROM.TEXT。将该队列配置为具有max-consumers =“ 10”。

    <address name="FROM.TEXT">
        <multicast>
            <queue name="FROM.TEXT" max-consumers="10">
                <durable>true</durable>
            </queue>
        </multicast>
    </address>

我创建了2条骆驼路线,这些路线将使用此队列中的消息并路由到2个不同的队列:

public void configure() throws Exception {

    InitialContext context = new InitialContext();

    from("jms:FROM.TEXT")
    .routeId("route1")
    .autoStartup(true)
    .convertBodyTo(String.class, "UTF-8")
    .to("jms:QUEUE1");

    getContext().start();

}

当我启动route1时,它为队列创建了使用者,但是当我启动route2时,什么也没有发生。我需要这样做是因为同一条消息必须路由到2个不同的队列。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果希望连接到目标的任何客户端都收到相同的消息,则应使用JMS主题。只需定义一个支持多播的地址即可:

<address name="FROM.TEXT">
    <multicast/>
</address>

那么您要走的路线将类似于:

public void configure() throws Exception {
   InitialContext context = new InitialContext();

   from("jms:topic:FROM.TEXT")
   .routeId("route1")
   .autoStartup(true)
   .convertBodyTo(String.class, "UTF-8")
   .to("jms:queue:QUEUE1");

   getContext().start();
}

您将像这样定义to队列:

<address name="QUEUE1">
   <anycast>
      <queue name="QUEUE1">
   </anycast>
</address>
相关问题