Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Camel端点dsl自定义组件名称_Java_Spring Boot_Apache Camel 3 - Fatal编程技术网

Java Apache Camel端点dsl自定义组件名称

Java Apache Camel端点dsl自定义组件名称,java,spring-boot,apache-camel-3,Java,Spring Boot,Apache Camel 3,我正在尝试使用ApacheCamel3。这是到目前为止我的代码。它工作正常。这是一个测试,所以非常简单。它从目录中读取并记录文件内容 @Component public class TestRoute extends EndpointRouteBuilder{ final String componentName = "file"; final String path = "/in/"; @Override pub

我正在尝试使用ApacheCamel3。这是到目前为止我的代码。它工作正常。这是一个测试,所以非常简单。它从目录中读取并记录文件内容

@Component
public class TestRoute extends EndpointRouteBuilder{
    final String componentName = "file";
    final String path = "/in/";
    
    @Override
    public void configure() throws Exception {      
        FileEndpointBuilder srcFileEndpoint = file(componentName, path);        
        from( srcFileEndpoint ).log(LoggingLevel.INFO, "body, ${body}");
    }//configure    
}//TestRoute
但是当我试图更改组件的名称时。例如 最终字符串componentName=“myCustomFileComponent”

我在控制台中得到以下错误

Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: myCustomFileComponent:///in/ due to: No component found with scheme: myCustomFileComponent
从中,我了解到我可以为示例中的端点myWMQ和myAMQ提供自定义名称。例如,路由从一个目录读取并写入另一个目录,我希望每个组件都以不同的方式配置。但是如果我指定一个自定义组件名,我会得到错误。因为它找不到custonName组件

我不知道它是否相关,但代码在Spring Boot项目中

  • Apache Camel版本3.4.0 Spring Boot版本2.3.1

    • 看来你没有抓住重点。该部分解释了“同一类型的多个Camel组件使用不同的名称注册”。这些是在端点的uri之外注册的camel组件

      据我所知,apachecamel中不能有动态路由端点,因为路由是在开始时创建的,并且这些端点在运行时不会更改

      如果您需要一个从不同端点读取的路由,您可以做的是为它们创建路由,并将它们路由到同一端点,如:

      public class TestRoute extends RouteBuilder {
      
          @Override
          public void configure() {
      
              from(component1)
                  .to("direct:myroute")
      
              from(component2)
                  .to("direct:myroute")
      
              from(component3)
                  .to("direct:myroute")
      
              from("direct:myroute")
                  .log(LoggingLevel.INFO, "body, ${body}");
          }
      
      }