1

我有这样的流程

  1. 一个“数据库入站端点”,它轮询(每 5 分钟)到 mySQL 数据库服务器并通过选择查询获取结果集(自动成为当前有效负载,即 #[message.payload])

  2. 'For each'组件和其中的'Logger' 组件使用 #[message.payload] 表达式

  3. 现在 flow 多了一个“Database-out-bound-endpoint”组件,它执行另一个选择查询并获得结果集。

  4. 使用表达式为 #[message.payload]的“For each”组件,其中包含“Logger”组件

注意:在第一个 DB 的记录器结果集中正在打印。我的意思是第二个记录器也显示了第一个查询本身的结果集。因为结果集存储为有效负载

所以,我的问题是

  1. 在上述场景中读取第二个数据库查询的结果集的 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 的问题。这是您的流程逻辑的问题。

第二个结果集在消息中不可用。

JDBC 出站端点是单向的。因此 Mule 流不会等待来自流中间的第二个 JDBC(出站)的回复(结果集)。所以第二次也是打印第一个结果集。

类型 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 回答