1

論理的な観点から、これは私が実装したい種類のルーティング動作です。

ルーティング情報の論理ビュー

外部サービスの応答を元の要求とマージできるようにしたい。

マルチキャスト、アグリゲーター、およびモックエンドポイントを使用してこれを実装することができましたが、よりクリーンな方法があるかどうか疑問に思いました。私の現在の実装は次のようになります。

        <multicast strategyRef="serviceAggregator" stopOnException="false">
            <to uri="mock:foo" />
            <to uri="http://0.0.0.0:9999/service/?throwExceptionOnFailure=false" />
        </multicast>
        <camel:to uri="log:uk.co.company.aggregated?showAll=true" />
        <to uri="http://0.0.0.0:9999/anotherService/ 

私が特に気に入らない部分は、モックエンドポイントを使用することですが、これが上記の図を表現するための非常に読みやすい方法ではないとも思います。それで、これを行うためのよりエレガントな方法があるかどうか疑問に思いましたか?

4

2 に答える 2

4

EIPパターンについて読むことをお勧めします。たとえば、コンテンツエンリッチャー http://camel.apache.org/content-enricher.html

応答メッセージと要求メッセージをマージできる場所。

コンテンツエンリッチャーには2つのモードがあります-エンリッチ-pollEnrich

上記のリンクのドキュメントとの違いに注意してください。

<route>
  <from uri="...">
  <enrich uri="http://0.0.0.0:9999/service/?throwExceptionOnFailure=false" strategyRef="serviceAggregator"/>
  <to uri="log:uk.co.company.aggregated?showAll=true" />
  <to uri="http://0.0.0.0:9999/anotherService/>
  ...
</route>

はい、図はスプリッターを示していますが、サンプルコードはマルチキャストEIPを使用しています。

于 2012-06-22T13:56:29.460 に答える
0

元のメッセージをヘッダーまたはプロパティに格納し、後でBeanにマージするだけで済みます。ヘッダーと現在の本文を使用します。

.setHeader( "orig"、body()).to( "externalService").bean(new MyMergeBean())

于 2012-06-22T14:49:46.387 に答える