Как использовать сообщения из темы ActiveMQ Artemis - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь работать с темами в ActiveMQ Artemis.

Я создал адрес многоадресной передачи и очередь многоадресной передачи внутри этого адреса.

Создано 2 маршрута с Apache Camel для подключения в этой теме, но когда я отправляю сообщение, только один Маршрут использует сообщение, а когда я публикую другое сообщение, второй маршрут, который использует это сообщение.

Ниже код и вывод.

public class CamelRoutes {

  public static void main(String[] args) throws Exception {
    ActiveMQJMSConnectionFactory connection = new ActiveMQJMSConnectionFactory("tcp://localhost:61616", "admin", "admin");

    CamelContext camel = new DefaultCamelContext();
    camel.addComponent("amq", JmsComponent.jmsComponent(connection));

    camel.addRoutes(new RouteBuilder(){

      @Override
      public void configure() throws Exception {
        from("amq:TEST.TOPIC")
        .routeId("Route1")
        .log("ROUTE1: ${body}");
      }
    });
    camel.addRoutes(new RouteBuilder(){

      @Override
      public void configure() throws Exception {
        from("amq:TEST.TOPIC")
        .routeId("Route2")
        .log("ROUTE2: ${body}");
      }
    });
    camel.start();
    Thread.sleep(20000000);
  }
}
2019-02-11 16:35:42 [Camel (camel-1) thread #1 - JmsConsumer[TEST.TOPIC]] INFO  Route1:159 - ROUTE1: {"message":1}
2019-02-11 16:35:45 [Camel (camel-1) thread #2 - JmsConsumer[TEST.TOPIC]] INFO  Route2:159 - ROUTE2: {"message":2}
2019-02-11 16:35:48 [Camel (camel-1) thread #1 - JmsConsumer[TEST.TOPIC]] INFO  Route1:159 - ROUTE1: {"message":3}
2019-02-11 16:35:51 [Camel (camel-1) thread #2 - JmsConsumer[TEST.TOPIC]] INFO  Route2:159 - ROUTE2: {"message":4}
2019-02-11 16:35:54 [Camel (camel-1) thread #1 - JmsConsumer[TEST.TOPIC]] INFO  Route1:159 - ROUTE1: {"message":5}

1 Ответ

0 голосов
/ 11 февраля 2019

Вы потребляете из очереди, а не из темы.Вам нужно исправить схему URI вашего потребителя.

Измените своего потребителя на:

from("amq:topic:TEST.TOPIC");

Вот как вы можете создать потребителя очереди:

from("amq:queue:YOUR.QUEUE.NAME);
// or as queue is default value
from("amq:YOUR.QUEUE.NAME);

Вот как можно создать тему для потребителя:

from("amq:topic.YOUR.TOPIC.NAME);
...