【问题标题】:Use Exchange Property in Camel DSL "to"在 Camel DSL 中使用 Exchange 属性“到”
【发布时间】:2013-04-25 19:02:46
【问题描述】:

我想在 Camel Exchange 上设置一个属性,然后在保存文件时使用该属性。在我的骆驼 dsl 中,我有以下内容:

.process(processorToSetExhangeProperty)  // sets the property <uid> on the exchange
.to("file:/tmp?fileName=file-" + property("uid") + ".xml")

文件被保存为:

"file-property{uid}.xml" though

我的处理器如下:

@Override
public void process(Exchange exchange) throws Exception {
    UUID uuid = UUID.randomUUID();
    exchange.setProperty("uid", uuid.toString());
    exchange.setOut(exchange.getIn());
}

对可能出现的问题或如何实现这一点有任何想法吗?

【问题讨论】:

    标签: java apache-camel


    【解决方案1】:

    Camel 中的to 在运行时不会被解释。

    如果你想动态地构建你的 URI,你应该使用接收者列表。 见https://camel.apache.org/manual/latest/faq/how-to-use-a-dynamic-uri-in-to.html

    【讨论】:

      【解决方案2】:

      更新 上面接受了新答案,而不是之前的答案:


      答案是[是]:

      .to("file:/tmp?fileName=file-${property.uid}") + ".xml")

      这个简单的表达式引入了交换属性。有关您可以获取的内容的完整列表,请参阅Simple Expression Language Reference

      【讨论】:

      • 这部分是错误的:正如 V.Goldin 所说,to() 组件是在路由构建期间评估的。在您的情况下,它部分起作用,因为 uid 可能只计算一次。如果您在多条消息后检查您的 uid,您应该注意到它可能永远不会改变。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 2022-08-24
      • 1970-01-01
      相关资源
      最近更新 更多