3

apache camel で SQL クエリの結果を分割する方法は? 結果として 1000 行が得られ、それらを 1 つずつではなくグループで処理したいとします (1 グループ = 10 行)。

次の Apache Camel 構成は、指定された RECORD_ID を持つレコードを探します。次のステップで、Camel の「スプリッター」は最初のクエリの結果を反復し、別のクエリを実行します。

たとえば、クエリ db.query.select.active.record の結果として 1000 行を取得した場合 2 番目のクエリdb.query.select.compute.statisticsは 1000x (前のクエリの各行に対して) 実行されます。パフォーマンスが最適ではないため、RECORD_ID のグループを作成したいと考えています。たとえば、最初のクエリで 1000 行が返され、それを 100 グループ (グループごとに 10 行) に分割し、クエリを 100x だけ実行できます。

サンプル構成:

<route>
    <from uri="seda:retrieveAlphaData" />
    <process ref="alphaResourceInitializer"/>
    <to uri="sql:{{db.query.select.active.record}}" />
    <camel:split>
        <camel:simple>${in.body}</camel:simple>
        <camel:setHeader headerName="recordId">
            <camel:simple>${in.body[RECORD_ID]}</camel:simple>
        </camel:setHeader>
        <setBody>
            <simple>${in.body[RECORD_NAME]}</simple>
        </setBody>
        <to uri="sql:{{db.query.select.compute.statistics}}" />
        <process ref="allActiveRecordDataFormatTransformer" />
        <camel:marshal ref="json" />
        <to uri="bean:activeRecordSdbPersister?method=processIt" />
    </camel:split>
</route>
4

1 に答える 1

0

「sql:{{db.query.select.active.record}}」以降、ルートを分割してはどうでしょうか?結果は SEDA エンドポイントに送信でき、10 個のレコードを同時に処理する 10 個の SEDA コンシューマーを構成できます。

于 2014-06-05T13:56:30.030 に答える