无法在骆驼路线中使用Bean方法

时间:2020-11-02 15:20:42

标签: spring-boot apache-camel

这是我的路线课程。

@Component
public class MyRoute extends RouteBuilder {
    
    @Value("${spring.enablelog}")
    public boolean enablelog;
    
    @Value("${spring.enableroutepolicy}")
    public boolean enableroutepolicy;
    
    
    @Override
    public void configure() throws Exception {
                
        CronScheduleRoutePolicy routepolicy = new CronScheduleRoutePolicy();
        routepolicy.setRouteStartTime("StartTime");
        routepolicy.setRouteStoptTime("StopTime");
        routepolicy.setRouteStartTime("StartTime");
    
        from("activemq:queue:inputq")
        .setProperty(Enablelog, constant(enablelog))
        .choice().when(exchangeProperty(Enablelog).isEqualTo(True))
            .bean(MyRoute.class, "setlogProperties('*', 'Request', 'Pending','Received Input message')")
            .process(logProcessor).endChoice()
        .process(msgProcessor).split().body()
        .toD("activemq:queue:waitq")
        .choice().when(exchangeProperty(Enablelog).isEqualTo(True))
            .bean(MyRoute.class, "setlogProperties('*', 'Response', 'Waiting','Response message waiting to be delivered')")
            .process(logProcessor).endChoice()
        .end();

        
        if (enableroutepolicy == true) {
        from("activemq:queue:waitq").routePolicy(routepolicy).noAutoStartup()
        .toD("activemq:queue:outputq")
        .choice().when(exchangeProperty(Enablelog).isEqualTo(True))
            .bean(MyRoute.class, "setlogProperties('*', 'Response', 'Success','Response message delivered')")
            .process(logProcessor).endChoice()
        .end();
        } else {
        from("activemq:queue:waitq").toD("activemq:queue:outputq")
        .choice().when(exchangeProperty(Enablelog).isEqualTo(True))
            .bean(MyRoute.class, "setlogProperties('*', 'Response', 'Success','Response message delivered')")
            .process(logProcessor).endChoice()
        .end();
        }
        
    }
    
    public void setlogPoperties(Exchange exchange, String msgtype, String status, String statusMessage ) {
        
        exchange.setrPoperty("MessageType", msgtype);
        exchange.setrPoperty("Status",status);
        exchange.setrPoperty("StatusMessage",statusMessage);
    }
     
}

在这条路线中,我有两条路线

  1. 从InQueue到WaitQueue
  2. 从WaitQueue到OutQueue。

第一条路线始终处于激活状态,我正在根据需要激活第二条路线。在第二种方法中,我无法调用.bean()并将参数传递给setlogPoperties()。我是骆驼的新手,不确定如何解决此问题。任何帮助都将受到赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

此问题的根本原因可能是没有从属性文件中获取“ enablelog”和“ enableroutepolicy”,并且由于布尔值的默认值为false,因此您的代码无法到达setlogPoperties()。

您已将该类注释为 @Component 。因此,为了使 @Value 从属性文件中检索值,请确保您自己定义了@PropertySource annotated in this class或创建了bean for this component in a separate @Configuration annotated class