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;
}
}
无论路由如何嵌套等,如何让邮件保持拆分?
答案 0 :(得分:0)
请参阅此EIP http://camel.apache.org/composed-message-processor.html
仅使用拆分器示例。
在AggregationStrategy
中,您将所有分割的子消息组合成一条消息,这是您想要的结果,例如分割器完成时的外发消息。如何做到这一点取决于您的消息和您想要保留的内容。例如,您可以将子消息放在List
或基于XML的子集中,您可以附加XML片段或其他内容。