我对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
的交换被过滤掉了会发生什么?我怎么知道我已经将所有交换聚合在一起?
- 这是解决这个问题的正确方法吗?如果不是,我还应该考虑什么?
仅供参考我的汇总策略只需要新交换的主体,并将它们添加到旧交易所的主体中。
非常感谢提前。
答案 0 :(得分:-1)
请参阅组合消息处理器EIP:http://camel.apache.org/composed-message-processor.html
还有一个标题为 Splitter Only 的示例,它允许执行fork / join样式。您仍然可以在拆分器中使用过滤器来过滤掉特定项目等。
并尝试不要让它变得复杂,有2个分割和所有类型的东西 - 保持它更简单,然后更容易使用,测试和使用。