如何将参数传递给Camel路由?

时间:2018-04-27 00:04:02

标签: apache-camel

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

public class MyRoute extends RouteBuilder {
    public void configure() throws Exception {
       from("direct:start")
         .to("cxf:bean:inventoryEndpoint?dataFormat=PAYLOAD");
    }
}

dataFormat的值是硬编码,但是,如果我想动态设置它会怎样?,从调用路由的代码传递一个值。我知道这可以添加构造函数并在其中传递参数,如下所示:

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

还有另一种方法吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

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

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

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

from("direct:start")
    .toD("${header.foo}"); 

将消息发送到动态端点,并从名为foo的消息头中获取值。 或者使用你的例子

.toD("cxf:bean:inventoryEndpoint?dataFormat=${header.dataFormat}");

这样,您可以通过标题单独为每条消息设置dataformat。

您可以在this Camel documentation page

上找到有关动态端点的更多信息