Apache Camel以嵌套分割

时间:2017-05-23 19:23:37

标签: java apache apache-camel

我对Apache Camel相当新,并且有几个问题。我希望我的路线能够做到以下几点:

  • LoadSomeThingsProcessor
  • 中加载列表列表
  • 拆分两次以便我可以处理内部列表中的每个项目
  • 过滤掉一些我不需要的东西
  • 加入内部分裂的所有剩余交换
  • 然后最终再次加入(回到一个交易所)

我的路线如下所示:

from("direct:myRoute")
    .process(new LoadSomeThingsProcessor())
    .split(body())
    .streaming()
    .process(new SomeProcessor())
    .split(body())
    .streaming()
    .filter(new SomeFilter())
    .aggregate(header("myHeader", new MyAggregationStrategy())
    .completionPredicate(new MyCompletionPredicate())
    // more processors
    // aggregate again (should just be one exchange after this point
    // more processors
    .to("direct:someOtherRoute");

MyCompletionPredicate' matches方法只是:

return exchange.getIn().getProperty("CamelSplitComplete", Boolean.class);

我想确保在继续之前将每个分组中的所有交换聚合在一起。

我的问题是: - CamelSplitComplete标题在某种程度上永远不会成立。什么可能导致这个? - 尝试在嵌套拆分内聚合会导致任何问题吗? - 如果最后一次交换(应该有CamelSplitComplete = true的交换被过滤掉了会发生什么?我怎么知道我已经将所有交换聚合在一起? - 这是解决这个问题的正确方法吗?如果不是,我还应该考虑什么?

仅供参考我的汇总策略只需要新交换的主体,并将它们添加到旧交易所的主体中。

非常感谢提前。

1 个答案:

答案 0 :(得分:-1)

请参阅组合消息处理器EIP:http://camel.apache.org/composed-message-processor.html

还有一个标题为 Splitter Only 的示例,它允许执行fork / join样式。您仍然可以在拆分器中使用过滤器来过滤掉特定项目等。

并尝试不要让它变得复杂,有2个分割和所有类型的东西 - 保持它更简单,然后更容易使用,测试和使用。