为 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