首页 > 解决方案 > 无法在骆驼路线中使用 Bean 方法

问题描述

这是我的路线课程。

@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() 并将参数传递给 setlogPperties()。我是骆驼的新手,不知道如何解决这个问题。任何形式的帮助表示赞赏。

谢谢,

标签: spring-bootapache-camel

解决方案


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

您已将该类注释为@Component。因此,为了让@Value从属性文件中检索值,请确保您要么在此类本身中定义@PropertySource注释,要么在单独的@Configuration注释类中为此组件创建bean 。


推荐阅读