2 верблюжьих маршрута потребляют одну и ту же очередь - PullRequest
0 голосов
/ 16 октября 2018

Я создал адрес многоадресной рассылки FROM.TEXT и Очередь Anycast FROM.TEXT внутри этого адреса.В этой очереди настроено значение max-consumer = "10".

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

Я создал 2 маршрута Camel, которые будут принимать сообщения из этой очереди и маршрутизировать в 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 голосов
/ 16 октября 2018

Если вы хотите, чтобы любой клиент, подключенный к месту назначения, получил такое же сообщение, вам следует использовать тему 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>
...