2016-08-16 5 views
1

これまで私の経験から、メッセージの本文は常に処理されていると言われました。だから私はいつもデータを処理し、最終的には結果を常に体に表示して、後で処理することができます。キャメルのスコープの外に身体のメッセージを渡す

現在、私は奇妙なことが起こっています。奇妙ではありませんが、私が使用しなかったものがあります。

私は次のルート

<route> 
    <from uri="activemq:queue:add"/> 
    <split> 
    <simple>${body}</simple> 
    <bean ref="pool" method="add(${body.getId},${body.getText})"/> 
    <log loggingLevel="INFO" message="GOOD BODY ${body}"/> 
    </split> 
    <log loggingLevel="INFO" message="BAD BODY of type of argument of add method ${body}"/> 
</route> 

を使用していると私はそれがGOOD BODYログに示されているように、少なくともaddメソッドの結果にアクセスしますが、最終的には体が後に何らかの理由で交換されたいですメソッドaddの引数の元の型。

私は分割ArrayListでここで作業していますが、とにかく最後には1つのエントリに1つの結果しか必要ありません。また、addメソッドを使ってリストのすべてのオブジェクトを追加する必要があるので、単一のエントリだけで作業することはできません。

"内部"処理の結果を通って元の呼び出しルートに戻すにはどうすればよいですか?

答えて

2

分割後、たとえば</split>の後。デフォルトで、Camelはスプリッタに送信された元のメッセージを使用します。

何か他のものを使用したい場合は、スプリッターでaggregationStrategyを使用して、最後に分割されたメッセージなどのメッセージを作成します。

はキャメルのドキュメントで詳細を参照してください:

+0

http://camel.apache.org/splitterは、私は 'aggregationStrategy'で少し演奏し、いくつかの本当に簡単な' correlationExpression'で 'UseLatestAggregationStrategy'を使用しますが、最終的に私はいくつかのキューにそれを渡す必要があります/子ども - 私はこれをしたくありません - 私は元のルートから "呼び出し元"に集約部分を返すしたいと思います。 InOutパターンを新しいエンドポイントに渡すのではなく、それをカバーするために使うことができるトリックはありますか? –

関連する問題