【问题标题】:How to pass parameters to a Camel route?如何将参数传递给骆驼路线?
【发布时间】:2018-04-27 00:04:01
【问题描述】:

是否可以将参数传递给 Camel 路由?例如,在下一个代码 sn-p 中:

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

还有其他方法吗?

非常感谢!

【问题讨论】:

标签: apache-camel


【解决方案1】:

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

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

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

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

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

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

这样,您可以通过标头单独设置每条消息的数据格式。

您可以在 this Camel documentation page 上找到有关动态端点的更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多