如何使用来自主题 ActiveMQ Artemis 的消息



我正在尝试处理ActiveMQ Artemis上的主题。

我在此地址内创建了一个组播地址和一个组播队列。

使用

Apache Camel 创建了 2 条路由以在本主题中进行连接,但是当我发布消息时,只有一个路由会消耗该消息,当我发布另一条消息时,使用此消息消息的 secont 路由。

在代码和输出下方。

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}

您是从队列中消费的,而不是从主题中消费的。您需要更正使用者的 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);

相关内容

  • 没有找到相关文章

最新更新