Apache Camel:如何存储变量以供以后使用

Posted

技术标签:

【中文标题】Apache Camel:如何存储变量以供以后使用【英文标题】:Apache Camel: how store variable for later use 【发布时间】:2012-02-29 23:18:00 【问题描述】:

在使用 Spring DSL 与 Camel “玩耍”时,我遇到了以下问题。假设预期的消息流如下所示:

    客户端向 CAMEL 发送带有 XML 正文的 HTTP POST 消息 CAMEL 将 HTTP POST 消息代理到服务器,使用 URI 稍作修改 接收到的 XML 正文中的信息(例如:使用 XPATH 过滤掉某个参数) 在 CAMEL 收到回复后,CAMEL 使用 1 中收到的 XML 正文中的参数向服务器发送 HTTP PUT 消息

比如:

<route>
   <from uri="...">
   <to uri="...">
   <to uri="...">
 </route>

问题:如何在步骤 1 中将参数存储在 Spring DSL 中,以便稍后在步骤 3 中使用?

所以,我想从步骤 1 中接收到的消息的 XML 正文中提取 XML 参数,并将它们放入变量中,然后我可以使用这些变量来编写要在步骤 3 中发送的消息。

为了提取参数,我正在考虑使用 XPATH。看起来不错,但我只是不知道如何将 XPATH 的输出放入变量中,然后稍后使用该变量......(语法??)

注意:如您所见,我的开发知识相当有限……抱歉。但是,如果有人可以帮助解决这个问题,那就太好了:)。

【问题讨论】:

【参考方案1】:

我给你举几个例子:

<setHeader headerName="token">
    <constant>someValue</constant>
</setHeader>

<setHeader headerName="userName">
    <simple>$properties:userName</simple>  //from config
</setHeader>

<setProperty propertyName="bodyBkp">
    <simple>$in.body</simple>
</setProperty>

<setProperty propertyName="orderNumber">
    <xpath resultType="String">//item[1]/orderNumber/text()</xpath>
</setProperty>

吸气剂

$exchangeProperty[orderNumber]

$in.headers.token

文档

检查简单表达式语言: http://camel.apache.org/simple.html

有时查看 Camel 的测试用例也会有所帮助,尤其是对于 Spring DSL:

setProperty with Spring DSL setHeader using XPATH with Spring DSL simple expression language test

【讨论】:

【参考方案2】:

您可以像这样在Exchange 属性或消息头中设置存储数据...

.setHeader("ID", XPathBuilder.xpath("/order/@id", String.class))
.setProperty("ID", XPathBuilder.xpath("/order/@id", String.class))

然后像这样在 Exchange 的 bean/处理器中检索它们...

String propId = (String) exchange.getProperty("ID");
String headerId = (String) exchange.getIn().getHeader("ID");                        

【讨论】:

感谢您的回复。但是,除了 Spring DSL(XML 表示法)之外,是否有机会获得相同的代码?干杯。 同时,我用 Java DSL 重新编码,效果很好。再次感谢。我还有 1 个问题:使用 setHeader 和 setProperty 有什么区别? 阅读本章了解骆驼的概念,你就会知道属性和标题的区别:manning.com/ibsen/chapter1sample.pdf 谢谢。那一章解释得很好:)。 setProperty 不接受三个参数。

以上是关于Apache Camel:如何存储变量以供以后使用的主要内容,如果未能解决你的问题,请参考以下文章

如何检索和存储这些指南以供以后使用?

如何存储缩放参数以供以后使用

如何使用 Apache Camel 从 Java 类访问 JMS 队列?

如何将 TWIG 输出渲染到变量以供以后使用(symfony2)?

如何保存对象以供以后使用?通过 JSON 或其他方式发送并存储在数据库中然后恢复

如何腌制或存储 Jupyter (IPython) 笔记本会话以供以后使用