Routes 动态路由apachecamel

Routes 动态路由apachecamel,routes,apache-camel,Routes,Apache Camel,是否有某种解决方案可以在执行时动态创建驼峰路线?通常,我们将驼峰路线明确定义为: from("direct:a") .to("direct:b"); 但是,我希望在需要时在时间执行中创建一些路由。例如,从属性文件中,应用程序将读取属性并使用属性创建路由。我要密码: from({property1}) .to({property2}); 如果存在一个或多个属性文件,则应用程序必须动态创建另一个路由,并将其添加到camel上

是否有某种解决方案可以在执行时动态创建驼峰路线?通常,我们将驼峰路线明确定义为:

from("direct:a")           
            .to("direct:b");
但是,我希望在需要时在时间执行中创建一些路由。例如,从属性文件中,应用程序将读取属性并使用属性创建路由。我要密码:

from({property1}) 
            .to({property2});

如果存在一个或多个属性文件,则应用程序必须动态创建另一个路由,并将其添加到camel上下文中。有人可以帮我吗?

Camel使用双大括号读取属性值(),因此:


Camel使用双大括号读取属性值(),因此:


是的,你当然能做到。我不知道你所说的“及时执行”到底是什么意思。
1.如果您所指的内容类似于您希望通过不在java代码中硬编码来创建路由,而是希望从属性文件中获取路由,那么这是非常简单的。您可以在创建路由的类中自动关联属性,并将它们用作任何其他变量。
比如说

@Configuration
public class CamelConfig {

  @Value("${from.route}")
  String fromRoute;

  @Value("${to.route}")
  String toRoute;

  @Bean
  public RoutesBuilder routes() {

    return new SpringRouteBuilder() {

      @Override
      public void configure() throws Exception {
        from(fromRoute).to(toRoute);
      }
    };
  }
}
二,。如果您想在应用程序上下文初始化后动态添加路由,那么您可以这样做

@Component
public class SomeBean {

  @Value("${from.route}")
  String fromRoute;


  @Value("${to.route}")
  String toRoute;

  @Autowired
  ApplicationContext applicationContext;

  public void someMethod() {

    CamelContext camelContext = (CamelContext) context.getBean(CamelContext.class);
     new SpringRouteBuilder() {
     @Override
     public void configure() throws Exception {
       from(fromRoute).to(toRoute);
     }
   };
  } 
}

是的,你当然能做到。我不知道你所说的“及时执行”到底是什么意思。
1.如果您所指的内容类似于您希望通过不在java代码中硬编码来创建路由,而是希望从属性文件中获取路由,那么这是非常简单的。您可以在创建路由的类中自动关联属性,并将它们用作任何其他变量。
比如说

@Configuration
public class CamelConfig {

  @Value("${from.route}")
  String fromRoute;

  @Value("${to.route}")
  String toRoute;

  @Bean
  public RoutesBuilder routes() {

    return new SpringRouteBuilder() {

      @Override
      public void configure() throws Exception {
        from(fromRoute).to(toRoute);
      }
    };
  }
}
二,。如果您想在应用程序上下文初始化后动态添加路由,那么您可以这样做

@Component
public class SomeBean {

  @Value("${from.route}")
  String fromRoute;


  @Value("${to.route}")
  String toRoute;

  @Autowired
  ApplicationContext applicationContext;

  public void someMethod() {

    CamelContext camelContext = (CamelContext) context.getBean(CamelContext.class);
     new SpringRouteBuilder() {
     @Override
     public void configure() throws Exception {
       from(fromRoute).to(toRoute);
     }
   };
  } 
}
要在运行时动态创建驼峰路由,您需要

  • 按1使用配置文件

  • 这可以像设置文件端点以使用文件一样简单,例如

    <from uri="file:path/to/config/files?noop=true"/>
        <bean ref="pleaseDefineThisSpringBean" method="buildRoute" />
        ...
    
    注意:函数“addRoutes”将覆盖同一路由的现有路由ID

    要在运行时动态创建驼峰路由,您需要

  • 按1使用配置文件

  • 这可以像设置文件端点以使用文件一样简单,例如

    <from uri="file:path/to/config/files?noop=true"/>
        <bean ref="pleaseDefineThisSpringBean" method="buildRoute" />
        ...
    

    注意:函数“addRoutes”将覆盖同一路由的现有路由ID

    我们如何在JavaDSL中实现第二个选项,我没有使用spring我们如何在JavaDSL中实现第二个选项,我没有使用spring