注入一个永不聚合的分割器

时间:2017-03-14 13:04:16

标签: apache-camel

Camel ver 2.17.3:我想在路由中插入一个拆分器,以便拆分消息保持拆分状态。如果我有一个带有拆分器的“直接”路由,当控制从内部路由返回时,我不再有拆分消息,只有原始路径。

from("direct:in")
.transform(constant("A,B,C"))
.inOut("direct:inner")
.log("RET-VAL: ${in.body}");

from("direct:inner")
.split()
.tokenize(",")      
.log("AFTER-SPLIT ${in.body}")
;

基于the answer to a similar question和Claus的评论,我尝试插入自己的聚合器并始终将组标记为“COMPLETE”。只有最后一条(拆分)消息被返回到外部路由。

from("direct:in")
.transform(constant("A,B,C"))
.inOut("direct:inner")
.log("RET-VAL: ${in.body}");

from("direct:inner")
.split(body().tokenize(","), new MyAggregationStrategy())
.log("AFTER-SPLIT ${in.body}")
;


public static class MyAggregationStrategy implements AggregationStrategy
{
  @Override
  public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
    System.out.println("Agg called with:"+newExchange.getIn().getBody());
    newExchange.setProperty(Exchange.AGGREGATION_COMPLETE_CURRENT_GROUP, true);
    return newExchange;
  }
}

无论路由如何嵌套等,如何让邮件保持拆分?

1 个答案:

答案 0 :(得分:0)

请参阅此EIP http://camel.apache.org/composed-message-processor.html

仅使用拆分器示例。

AggregationStrategy中,您将所有分割的子消息组合成一条消息,这是您想要的结果,例如分割器完成时的外发消息。如何做到这一点取决于您的消息和您想要保留的内容。例如,您可以将子消息放在List或基于XML的子集中,您可以附加XML片段或其他内容。