0

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

@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

但是当我尝试更改组件的名称时。例如 final String componentName = "myCustomFileComponent";

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

Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: myCustomFileComponent:///in/ due to: No component found with scheme: myCustomFileComponent

这里,我知道我可以为示例中的端点myWMQmyAMQ提供自定义名称。例如,路由从一个目录读取并写入另一个目录,我希望每个组件都以不同的方式进行配置。但是,如果我指定一个自定义组件名称,我会收到错误消息。因为它没有找到 custonName 组件。

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

  • Apache Camel 版本 3.4.0 Spring Boot 版本 2.3.1
4

1 回答 1

1

看来你没有抓住重点。该部分解释了“相同类型的多个 Camel 组件以不同的名称注册”。这些是注册的骆驼组件,而不是端点的 uri。

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

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

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}");
    }

}
于 2020-07-01T08:04:46.243 回答