使用springBoot和骆驼向两个ActiveMQ代理发送消息

时间:2020-07-23 16:51:57

标签: java spring-boot apache-camel activemq messagebroker

我正在努力创建一个使用Apache Camel并将消息发送到两个单独的ActiveMQ代理的Spring Boot应用程序。

我创建了两个ActiveMQComponent bean,每个bean配置为另一个代理。然后,我定义了一个路由器,该路由器从第一个代理中的队列获取消息,进行处理并将其传输到第二个代理中的队列。

当我尝试运行应用程序时,出现以下错误:

org.apache.camel.FailedToCreateRouteException: Failed to create route route1: Route(route1)[From[{{primary.input.queue}}] -> [Log[New mess... because of No endpoint could be found for: primary://MyInputQueue 

我的配置代码是:

@Bean("primary") 
public ActiveMQComponent primaryAMQComponent(final ConnectionFactory connectionFactory, final 
      JmsTransactionManager jmsTransactionManager ) {
    ActiveMQComponent component = new ActiveMQComponent();
    
    component.setBrokerURL("tcp://localhost:61616");
    component.setPreserveMessageQos(true);
    component.setConnectionFactory(connectionFactory);
    component.setTransactionManager(jmsTransactionManager);
    return component;
}

@Bean("secondary") 
public ActiveMQComponent primaryAMQComponent(final ConnectionFactory connectionFactory, final 
     JmsTransactionManager jmsTransactionManager ) {
    ActiveMQComponent component = new ActiveMQComponent();
    
    component.setBrokerURL("tcp://remotehost:61616");
    component.setPreserveMessageQos(true);
    component.setConnectionFactory(connectionFactory);
    component.setTransactionManager(jmsTransactionManager);
    return component;
}

我的路由器是:

@Component
public class JmsTestRouter extends RouteBuilder {

    
    static final Logger log = LoggerFactory.getLogger(JmsTestRouter.class);

    @Override
    public void configure() throws Exception {
        from("{{primary.input.queue}}")
          .log("New message received")
          .process(exchange -> {
              System.out.println("New message received - message text :" + exchange.getMessage().getBody());
              String convertedMessage = exchange.getMessage().getBody() + " is processed ";
              exchange.getMessage().setBody(convertedMessage);
          })
          .to("{{secondary.output.queue}}")
          .log("Message is successfully sent to the output queue")
        .end();
    }
}

属性的定义是:

primary.input.queue=primary:MyInputQueue
secondary.output.queue=secondary:MyOutputQueue

显然我做错了。任何帮助将不胜感激。

0 个答案:

没有答案