【问题标题】:Add camel route at runtime using end points configured in property file使用属性文件中配置的端点在运行时添加骆驼路线
【发布时间】:2018-12-02 10:20:15
【问题描述】:

我拥有一个 spring 应用程序,并希望在我的应用程序启动期间动态添加骆驼路线。端点在属性文件中配置并在运行时加载。 使用 Java DSL,我使用 for 循环来创建所有路由,

for(int i=0;i<allEndPoints;i++)
  {
  DynamcRouteBuilder route = new 
   DynamcRouteBuilder(context,fromUri,toUri) 
camelContext.addRoutes(route)

}
private class DynamcRouteBuilder extends RouteBuilder {
    private final String from;
    private final String to;

    private MyDynamcRouteBuilder(CamelContext context, String from, String to) {
        super(context);
        this.from = from;
        this.to = to;
    }

    @Override
    public void configure() throws Exception {
        from(from).to(to);
    }
}

但在创建第一条路线时遇到异常

无法创建路由 file_routedirect: at: >>> OnException[[class org.apache.camel.component.file.GenericFileOperationFailedException] -> [Log[Exception traped ${exception.class}], process[Processor@0x0 ]]]

不确定 - 有什么问题?有人可以对此提出任何建议或解决方法。谢谢

【问题讨论】:

    标签: spring-boot apache-camel


    【解决方案1】:

    嗯,要在迭代中创建路由,最好有一些对象来保存一条路由的不同值。我们称之为RouteConfiguration,一个简单的POJO,带有fromtorouteId的字符串字段。

    我们使用 YAML 文件 来配置这些东西,因为您有 真正的列表格式,而不是在属性文件中使用“平面列表”(route[0].from、@987654326 @)。

    如果你使用Spring,你可以使用@ConfigurationProperties直接将这样一个“对象配置列表”转换成一个对象集合

    当您能够创建这样的值对象集合时,您可以简单地对其进行迭代。这是一个非常简化的示例。

    @Override
    public void configure() {
        createConfiguredRoutes();
    }
    
    void createConfiguredRoutes() {
        configuration.getRoutes().forEach(this::addRouteToContext);
    }
    
    // Implement route that is added in an iteration
    private void addRouteToContext(final RouteConfiguration routeConfiguration) throws Exception {
        this.camelContext.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from(routeConfiguration.getFrom())
                    .routeId(routeConfiguration.getRouteId())
                    ...
                    .to(routeConfiguration.getTo());
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-14
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 2017-04-30
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      相关资源
      最近更新 更多