Java 如何在运行时修改camel端点 问题

Java 如何在运行时修改camel端点 问题,java,xml,spring,spring-mvc,apache-camel,Java,Xml,Spring,Spring Mvc,Apache Camel,我有一个使用的应用程序。我对RouteBuilder类所扮演的角色以及它实际上是如何初始化的感到困惑。我知道,假设configure()方法是: 在初始化时调用,以使用fluent builder语法构建路由 但这种初始化何时发生?它是在应用程序启动时发生的,还是在路由即将使用时发生的 这个问题的最终目的是问我如何在运行时修改路由。我希望能够根据需要建造不同的路线 例子 xml定义: <service name="myService" tier="3"> <reques

我有一个使用的应用程序。我对RouteBuilder类所扮演的角色以及它实际上是如何初始化的感到困惑。我知道,假设configure()方法是:

在初始化时调用,以使用fluent builder语法构建路由

但这种初始化何时发生?它是在应用程序启动时发生的,还是在路由即将使用时发生的

这个问题的最终目的是问我如何在运行时修改路由。我希望能够根据需要建造不同的路线

例子 xml定义:

<service name="myService" tier="3">
    <requestType>my.package.RequestType</requestType>
    <responseType>my.package.ResponseType</responseType>
    <endpoint>
        <httpEndpoint>
            <url default="true" value="someUrl"/>
            <timeout value="5000"/>
        </httpEndpoint>
    </endpoint>
</service>
问题
  • configure()何时执行
  • 如何动态设置端点url
驼峰服务的生命周期记录如下:

Camel使用一个名为Service的简单生命周期接口,它有一个start()和stop()方法。 各种类实现服务,如CamelContext以及许多组件和端点类。 使用Camel时,通常必须启动CamelContext,该上下文将启动所有不同的组件和端点,并激活路由规则,直到上下文再次停止


当上下文开始时,各种组件开始。不确定我是否理解动态url部分。如果要指示一个动态端点(如果数据是this,那么queue1或queue2),您应该能够使用类似于DynamicRouter EIP的东西,如本文所述()

您可以使用toD在运行时基于表达式动态更改端点。看


如果您想更改更多的路由或添加一个全新的路由,请查看上下文中的API。这是一个添加全新路线的示例。

您有几个选项

  • 将它们作为spring属性注入
  • 从外部属性源注入它们
  • 从一些bean方法注入它们
  • 然后,您可以将属性值放在标题中,然后将该值放在
    .toD(“$header.routeEndpoint”)
    中。这可以处理动态端点

    要重建整个路线,您需要使用API

    public class myRouteBuilder extends RouteBuilder {
    
        @Override
        public void configure() throws Exception {
            // When does this method get executed?
        }
    }