1

私はこのような流れを持っています

  1. (5 分ごとに) mySQL Database-Server にポーリングし、select-query によって結果セットを取得する「データベース インバウンド エンドポイント」 (自動的にこれが現在のペイロード、つまり #[message.payload] になります)

  2. #[message.payload] として式を使用する「For each」コンポーネントとその中の「Logger」コンポーネント

  3. 現在、フローには、別の選択クエリを実行して結果セットを取得する「Database-out-bound-endpoint」コンポーネントがもう 1 つあります。

  4. #[message.payload] として式を使用して、 「Logger」コンポーネントを含む「For each」コンポーネント

注: ロガーでは、最初の DB の結果セットが印刷されます。2番目のロガーも最初のクエリ自体の結果セットを表示していることを意味します。結果セットがペイロードとして保存されているためです

だから、私の質問は

  1. 上記のシナリオで 2 番目のデータベース クエリの結果セットを読み取る MEL は何ですか。

  2. フローで結果セットを読み取る別の方法はありますか

これが構成XMLです

<jdbc-ee:connector name="oracle_database" dataSource-ref="Oracle_Data_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database"/>
    <flow name="testFileSaveFlow3" doc:name="testFileSaveFlow3">
        <poll frequency="1000" doc:name="Poll">
            <jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="selectTable1" queryTimeout="-1" connector-ref="oracle_database" doc:name="get data from table 1">
                <jdbc-ee:query key="selectTable1" value="SELECT * FROM TABLE1"/>
            </jdbc-ee:outbound-endpoint>
        </poll>
        <foreach doc:name="For Each">
            <logger message="#[message.payload]" level="INFO" doc:name="prints result-set of table1"/>
        </foreach>
        <jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="selectTable2" queryTimeout="-1" connector-ref="oracle_database" doc:name="get data from table 2">
            <jdbc-ee:query key="selectTable2" value="SELECT * FROM TABLE2"/>
        </jdbc-ee:outbound-endpoint>
        <foreach doc:name="For Each">
            <logger message="#[message.payload]" level="INFO" doc:name="prints result-set of table2"/>
        </foreach>
    </flow>

前もって感謝します。

4

1 に答える 1

1

これは MEL の問題ではありません。フローロジックの問題です。

2 番目の結果セットは、メッセージでは利用できません。

JDBC アウトバウンド エンドポイントは一方向です。したがって、Mule フローは、フローの途中で 2 番目の JDBC (アウトバウンド) からの応答 (結果セット) を待機しません。したがって、2 回目も最初の結果セットを出力しています。

タイプ 1:

Try making your JBDC outbound  request-response instead of one-way. 

タイプ 2:

Try Mule Enricher to call the JDBC outbound to call the DB and store the result set into a varaible and try looping the varaible.

お役に立てれば。

于 2013-10-28T16:19:30.167 に答える