Apache camel 如何将参数传递给驼峰路线?
例如,在下一个代码段中,可以将参数传递给Camel route?: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的值在硬代码中,但是,如果我想
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}");
通过这种方式,您可以通过标头分别为每条消息设置数据格式
您可以在此问题的可能重复项上找到有关动态端点的更多信息