我正在尝试使用 Apache Camel 2.14 在 Spring XML 中配置 Apache Camel 路由。该路线将涉及<aggregator>
or an <enrich>
/<pollEnrich>
;我对 Camel 的使用经验还不够,不知道哪个 EIP 最有用。不管怎样,我需要一个aggregationStrategy
。我的最终目标是为希望在 XML 中配置路由的客户端创建 Camel 路由。
通过在互联网上搜索,我了解到存在一个名为 Camel 的类FlexibleAggregationStrategy
。我发现的东西声称,我引用,“它可以让你快速
启动一个 AggregationStrategy,它能够用零 Java 代码执行最典型的聚合任务。”这对我来说听起来很有用,因为我们希望尽可能多地使用 XML 进行配置。因此,最好避免编写我自己的AggregationStrategy
在爪哇。问题是,我不知道如何使用FlexibleAggregationStrategy
.
据我所知,FlexibleAggregationStrategy
使用以下方法从消息中选取元素进行聚合Expression
called pickExpression
,并过滤掉匹配的消息Predicate
conditionPredicate
。因此,我假设我需要一种方法在 Spring XML 中设置这些值。不幸的是,我无法让以下代码块工作:
属性名称设置为pickExpression
,作为元素的值:
<bean id="FlexibleAggregationStrategy"
class="org.apache.camel.util.toolbox.FlexibleAggregationStrategy">
<property name="pickExpression">
<xpath>
//ID
</xpath>
</property>
</bean>
属性名称设置为pick
,作为元素的值:
<bean id="FlexibleAggregationStrategy"
class="org.apache.camel.util.toolbox.FlexibleAggregationStrategy">
<property name="pick">
<xpath>
//ID
</xpath>
</property>
</bean>
属性名称设置为pickExpression
,值作为属性:
<bean id="FlexibleAggregationStrategy"
class="org.apache.camel.util.toolbox.FlexibleAggregationStrategy">
<property name="pickExpression" value="<xpath>//ID</xpath>"/>
</bean>
属性名称设置为pick
,值作为属性:
<bean id="FlexibleAggregationStrategy"
class="org.apache.camel.util.toolbox.FlexibleAggregationStrategy">
<property name="pick" value="<xpath>//ID</xpath>"/>
</bean>
每次,我都会收到一条错误消息,抱怨无法找到具有我指定名称的属性描述符。我尝试两者的原因pick
and pickExpression
就是说,在似乎是FlexibleAggregationStrategy的源代码 https://github.com/apache/camel/blob/master/camel-core/src/main/java/org/apache/camel/util/toolbox/FlexibleAggregationStrategy.java,类中保存pick表达式的变量被命名为pickExpression
,但设置它的方法只需调用pick()
.
我对 Spring XML 没有完全的理解,但根据我所知道的,使用<property>
设置变量值的标记要求 bean 具有该变量的 getter 和 setter。自从FlexibleAggregationStrategy
没有 getter 和 setterpickExpression
,无论如何我都遵循了错误的方法。但是,如果我正在阅读XML 模式定义<bean> tag http://www.springframework.org/schema/beans/spring-beans.xsd正确地,向 bean 发送信息的唯一方法是使用<property>
标记或带有构造函数参数。自从FlexibleAggregationStrategy
没有设置的构造函数pickExpression
,我还没有找到配置的方法FlexibleAggregationStrategy
无需编写Java代码。
我发现了对“方法注入”的引用,它可能允许我配置FlexibleAggregationStrategy
。然而,我发现的唯一说明涉及用 Java 编写 bean。因此,该技术还涉及编写 Java 代码;另外,我自己写似乎会更快更直接AggregationStrategy
.
截至目前,新旧 Apache Camel Wiki 页面都没有记录<aggregator>
模式没有提到FlexibleAggregationStrategy
根本不。
我尝试在 Google 上搜索这个词FlexibleAggregationStrategy
看看是否有人写过任何使用教程或文档FlexibleAggregationStrategy
。截至目前,我获得的前两个 Google 结果是自动生成的 JavadocFlexibleAggregationStrategy
班级。第三个结果是我上面链接的 github 托管的源代码。第四个结果是我发布的关于该主题的另一个问题;这个问题已关闭,因为我不明白如何编写正确的 StackOverflow 问题。第五个结果是 grepcode.com 上托管的源代码。第六个结果是我不理解的接口的 Javadoc。第七个结果是别人在grokbase.com上问的一个问题;这个问题没有答案。第八个结果是其他人在 qnalist.com 上提出的问题,但也没有答案。第九个结果似乎来自涉及提交源代码的邮件列表FlexibleAggregationStrategy
班级。第十个结果是 grokbase 发布到 osdir.com 的问题。类似的搜索返回的结果大多相同;我发现其他新结果同样没有帮助。我认为,如果有人写了一个很好的使用指南FlexibleAggregationStrategy
,它会出现在这些搜索中。
有没有人用过FlexibleAggregationStrategy
谁能告诉我怎么设置pickExpression
and conditionPredicate
所以我可以用FlexibleAggregationStrategy
?如果您知道我需要配置它的任何其他信息,或者围绕它的任何其他常见陷阱,我们也将不胜感激。
感谢您的时间。