簡體   English   中英

Apache Camel Endpoint-dsl 自定義組件名稱

[英]Apache Camel Endpoint-dsl custom component names

我正在嘗試使用 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 引導項目中

  • Apache 駱駝版 3.4.0 Spring 引導版 2.3.1

看來你沒有抓住重點。 該部分解釋了“相同類型的多個 Camel 組件以不同的名稱注冊”。 這些是注冊的駱駝組件,而不是端點的 uri。

據我所知,您不能在 apache 駱駝中擁有動態路由端點,因為路由是在開始時創建的,並且這些端點在運行時不會改變。

如果您需要一個從不同端點讀取的路由,您可以做的是為它們設置路由並將它們路由到相同的端點,例如:

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM