Apache camel 如何将参数传递给驼峰路线?

Apache camel 如何将参数传递给驼峰路线?,apache-camel,Apache Camel,例如,在下一个代码段中,可以将参数传递给Camel route?: public class MyRoute extends RouteBuilder { public void configure() throws Exception { from("direct:start") .to("cxf:bean:inventoryEndpoint?dataFormat=PAYLOAD"); } } dataFormat的值在硬代码中,但是,如果我想

例如,在下一个代码段中,可以将参数传递给Camel route?:

public class MyRoute extends RouteBuilder {
    public void configure() throws Exception {
       from("direct:start")
         .to("cxf:bean:inventoryEndpoint?dataFormat=PAYLOAD");
    }
}
dataFormat的值在硬代码中,但是,如果我想动态设置它呢?从调用route的代码中传递一个值。我知道可以添加构造函数并在其中传递参数,如下所示:

public class MyRoute extends RouteBuilder {

    private String type;

    public MyRoute(String type){
      this.type = type;
    }

    public void configure() throws Exception {
       from("direct:start")
         .to("cxf:bean:inventoryEndpoint?dataFormat=" + type);
    }
}
还有别的办法吗


非常感谢

正如您所提到的,如果参数从Camel角度来看是静态的,则可以使用构造函数(或setter或任何其他Java/Framework工具)

这些参数在应用程序中是可配置的,但在应用程序启动后,它们不再进行更改。因此,驼峰路由处理的每条消息都使用相同的值

相反,当参数是动态的(即它们可以为每个处理过的消息更改)时,您可以使用Camel的动态端点
toD()
。这些端点地址可以包含在运行时计算的表达式。例如路线

from("direct:start")
    .toD("${header.foo}"); 
将消息发送到动态端点,并从名为
foo
的消息头中获取值。 或者用你的例子

.toD("cxf:bean:inventoryEndpoint?dataFormat=${header.dataFormat}");
通过这种方式,您可以通过标头分别为每条消息设置数据格式


您可以在

此问题的可能重复项上找到有关动态端点的更多信息