2017-03-14 5 views
1

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; 
    } 
} 

+0

スプリッターから集約戦略を直接使用することができます。ここで、スプリッターからの送信応答メッセージを作成することができます。それで、あなたは凝集剤を必要としません。 –

+0

お返事ありがとうございます。スプリッタに私の集計戦略を入れましたが、最後のものだけを返します。 Exchange.AGGREGATION_COMPLETE_CURRENT_GROUPをtrueに設定すると、分割メッセージを別々に返すようになると思いますが、元の "A、B、C"から "C"が返されます。 アグリゲータを単に送信する方法はありますかそれぞれのメッセージを別々に分割していますか? –

+0

スプリッターとアグリゲーターに関するCamelのドキュメントをもう少し解説し、それがどのように機能するのかを確認してください。 –

答えて

0

のみ例スプリッタと、このEIP http://camel.apache.org/composed-message-processor.html

を参照してください。

そして、AggregationStrategyでは、すべてのそれらの分割されたサブメッセージを1つのメッセージにまとめます。たとえば、分割が完了したときの送信メッセージです。あなたのやり方は、あなたのメッセージとあなたが守りたいものによって決まります。たとえば、サブメッセージをListに入れることもできますし、XMLベースのものを追加することもできます。

+0

私はメッセージを結合したくありません。私はそれらを分割し、スプリットが終了するときに分割したままにしたい。多分私の主な誤解ですか?たぶんsplit()... end()はかっこのように振る舞い、返り値は常に1つのExchange * outside *でしょうか? 「スプリッタが返すもの」に関するスプリッタのドキュメントには、デフォルトを変更できることが記載されています。私は* single *メッセージで返されるものを変更する方法を理解しています。私は呼び出し元に複数の交換を返す方法があるかもしれないと思ったが、おそらく私は間違っている。 –

+0

はいそのような終了括弧。 –

+0

ご協力ありがとうございます。それは私のデザインのいくつかを別のものよりむしろある方向に推進するのに役立ちます。 –

関連する問題