为 camel recipientList 聚合器使用脚本语言
Using a scripting language for camel recipientList aggregator
我正在使用 Camel 开发一个项目,出于各种原因,如果我们避免使用任何 Java 代码会更好。不要问...!
目前我正在使用 recipentList 和一个小型聚合器,它只是将消息连接在一起,所以只有几行。但是我试图找出是否可以不使用这些行并将 activity 移动到路由定义中。
到目前为止我有
<bean id="docGenAggregator" class="local.dev.scatterGather.DocGenAggregator">
....
<recipientList
strategyRef="docGenAggregator"
strategyMethodName="docGenRequest">
<header>documentPartsList</header>
</recipientList>
工作正常。在这种情况下,recipientList 实际上是一个 xslt:... 端点的列表,每个端点都返回 xml,我只想连接所有返回的 xml。
我的 bean 目前是
package local.dev.scatterGather;
public class DocGenAggregator {
public String docGenRequest(String existing, String next) {
return existing + next;
}
}
使用脚本的示例(不太关心语言,我已经在这方面的陡峭学习曲线上走得更远,所以再多一点也不会有什么不同!)
谢谢
是的,您可以使用内联 groovy 脚本来执行此操作。我在 Apache Camel 中创建了一个单元测试来证明这一点。
<!-- inline a groovy script to use for the aggregator -->
<lang:groovy id="myAggregate">
<lang:inline-script>
class MyAggregate {
String someNameHere(String prev, int next) {
return prev * next
}
}
</lang:inline-script>
</lang:groovy>
然后从聚合中您需要告诉要使用的方法名称,因为 groovy class 有一些额外的方法 Camel 默认情况下不会跳过
<!-- we must declare the name of the method, as the inlined groovy script has additional methods -->
<aggregate strategyRef="myAggregate"
strategyMethodName="someNameHere"
completionSize="2">
完整示例在此提交中:https://github.com/apache/camel/commit/1c7a2d749e5f75545aa9899e9b06cdef4cf1d614
我正在使用 Camel 开发一个项目,出于各种原因,如果我们避免使用任何 Java 代码会更好。不要问...!
目前我正在使用 recipentList 和一个小型聚合器,它只是将消息连接在一起,所以只有几行。但是我试图找出是否可以不使用这些行并将 activity 移动到路由定义中。
到目前为止我有
<bean id="docGenAggregator" class="local.dev.scatterGather.DocGenAggregator">
....
<recipientList
strategyRef="docGenAggregator"
strategyMethodName="docGenRequest">
<header>documentPartsList</header>
</recipientList>
工作正常。在这种情况下,recipientList 实际上是一个 xslt:... 端点的列表,每个端点都返回 xml,我只想连接所有返回的 xml。
我的 bean 目前是
package local.dev.scatterGather;
public class DocGenAggregator {
public String docGenRequest(String existing, String next) {
return existing + next;
}
}
使用脚本的示例(不太关心语言,我已经在这方面的陡峭学习曲线上走得更远,所以再多一点也不会有什么不同!)
谢谢
是的,您可以使用内联 groovy 脚本来执行此操作。我在 Apache Camel 中创建了一个单元测试来证明这一点。
<!-- inline a groovy script to use for the aggregator -->
<lang:groovy id="myAggregate">
<lang:inline-script>
class MyAggregate {
String someNameHere(String prev, int next) {
return prev * next
}
}
</lang:inline-script>
</lang:groovy>
然后从聚合中您需要告诉要使用的方法名称,因为 groovy class 有一些额外的方法 Camel 默认情况下不会跳过
<!-- we must declare the name of the method, as the inlined groovy script has additional methods -->
<aggregate strategyRef="myAggregate"
strategyMethodName="someNameHere"
completionSize="2">
完整示例在此提交中:https://github.com/apache/camel/commit/1c7a2d749e5f75545aa9899e9b06cdef4cf1d614