Camel ver 2.17.3:スプリットメッセージを分割したままにするようにスプリッタをルートに挿入したいとします。私がスプリッターで「直接」ルートを持っていて、コントロールが内側のルートから戻ったとき、私はもはやスプリットメッセージを持っていません。 the answer to a similar questionに基づいて 集約しないスプリッタを挿入する
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}")
;
、以下クラウスさんのコメントは、私は私自身のアグリゲータを挿入し、常に「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;
}
}
?
スプリッターから集約戦略を直接使用することができます。ここで、スプリッターからの送信応答メッセージを作成することができます。それで、あなたは凝集剤を必要としません。 –
お返事ありがとうございます。スプリッタに私の集計戦略を入れましたが、最後のものだけを返します。 Exchange.AGGREGATION_COMPLETE_CURRENT_GROUPをtrueに設定すると、分割メッセージを別々に返すようになると思いますが、元の "A、B、C"から "C"が返されます。 アグリゲータを単に送信する方法はありますかそれぞれのメッセージを別々に分割していますか? –
スプリッターとアグリゲーターに関するCamelのドキュメントをもう少し解説し、それがどのように機能するのかを確認してください。 –