可以将参数传递给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);
}
}
还有另一种方法吗?
非常感谢!
答案 0 :(得分:2)
正如您所提到的,如果参数从Camel的角度来看是静态的,您可以使用构造函数(或setter或任何其他Java / Framework工具)。
参数可在应用程序中配置,但在应用程序启动后,它们不会进行任何更改。因此,Camel路由处理的每条消息都使用相同的值。
相反,当参数是动态的 - 即它们可以针对每个已处理的消息进行更改时,您可以使用Camel的动态端点toD()
。这些端点地址可以包含在运行时计算的表达式。例如路线
from("direct:start")
.toD("${header.foo}");
将消息发送到动态端点,并从名为foo
的消息头中获取值。
或者使用你的例子
.toD("cxf:bean:inventoryEndpoint?dataFormat=${header.dataFormat}");
这样,您可以通过标题单独为每条消息设置dataformat。
上找到有关动态端点的更多信息