1

<recipient-list>カスタム アグリゲータを使用して複数の結果を結合するインバウンド HTTP エンドポイントにリクエストを送信しようとしています。カスタム アグリゲーターの結果を "待機" させるには、どうすれば受信 HTTP エンドポイントを取得できますか?

これが私のサンプルフローです。アグリゲーターは完璧に機能します。ただし、 は非同期であるため、インバウンドの http エンドポイントはすぐに返されます。私が本当にやりたいことは、Custom Aggregator からの結果を http エンドポイントへの応答として返すことです。シンプルなものが欠けているような気がします。

<flow name="AggregationExample">
    <http:inbound-endpoint
        exchange-pattern="request-response"
        host="localhost"
        port="8082"
        path="test/aggregate"
        />  

    <recipient-list evaluator="groovy" expression="['vm://source1','vm://source2']"></recipient-list>

        <!-- How do I wait for result of custom aggregator? -->
</flow>

<flow name="SourceAggregation">
    <vm:inbound-endpoint path="sourceresult" />

    <custom-aggregator failOnTimeout="true" class="com.example.MySourceAggregator"/>

    <logger message="RESULTS: #[payload]"/>
</flow>

<flow name="Source1">
    <vm:inbound-endpoint path="source1" />

    <set-payload value="#[groovy:Thread.currentThread().getContextClassLoader().getResourceAsStream('example-source1.json').text]"/>

    <vm:outbound-endpoint path="sourceresult" />
</flow>

<flow name="Source2">
    <vm:inbound-endpoint path="source2" />

    <set-payload value="#[groovy:Thread.currentThread().getContextClassLoader().getResourceAsStream('example-source2.json').text]"/>

    <vm:outbound-endpoint path="sourceresult" />
</flow>
4

1 に答える 1

1

request-reply受信者リストの代わりにフローでルーターを使用します。 とAggregationExampleにディスパッチする別のフローにディスパッチしSource1ますSource2

一般的に言えば、あなたが何を達成しようとしているのかはわかりません.2つのファイルを並行して読み取るためだけにこの仕掛けを構築しましたか? それともそれ以上のものがありますか?それだけの場合、本当に価値があると確信していますか?ファイルの同時読み取りに物理的な制限はありませんか? すべてが最適化のためであれば、キャッシングがより良い方法になる可能性があります。

また、受信者recipient-listが静的である場合、なぜルーターではなくこのルーターを使用するのallでしょうか?

最後に、代わりに Groovy 式を使用してファイルを読み取るという MEL の問題はありましたか?

于 2012-11-07T18:54:40.637 に答える