Имена пользовательских компонентов Apache Camel Endpoint-dsl

Я пытаюсь использовать DSL конечной точки Apache Camel 3. Пока это мой код. Работает нормально. Это тест, так что это действительно просто. Он читает из каталога и регистрирует содержимое файла.

@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

Из здесь, я понимаю, я могу предоставить пользовательские имена для конечных точек, myWMQ и myAMQ в примере. Например, маршрут читает из каталога и записывает в другой, и я хотел бы, чтобы каждый компонент был настроен по-разному. Но если я укажу настраиваемое имя компонента, я получаю сообщение об ошибке. Потому что он не находит компонент custonName.

Не знаю, актуально ли это, но код находится внутри проекта Spring Boot

  • Apache Camel версии 3.4.0 Spring Boot версии 2.3.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}");
    }

}
Другие вопросы по тегам