如何在 MULE CE 中编写依赖查询?

How to write dependent queries in MULE CE?

我听说我们不能在一个流中写两个入站端点,但下面是我的要求,第二个 select 查询需要第一个查询负载值。当我 运行 这给了一个例外。请让我知道是否有任何替代方法来写这个。


<flow name="Some">
<jdbc:inbound-endpoint queryKey="SelectSome"
connector-ref="ProConnector" doc:name="SomeFromPro"

pollingFrequency="10000" queryTimeout="-1">
<jdbc:transaction action="NONE" timeout="10" />
<jdbc:query key="SelectSome"
value="SELECT top 1 * from table1 where IsProcessed = 0" />
<jdbc:query key="SelectSome.ack"
value="update table1 set IsProcessed=1 where ID = #[map-payload:ID] " />
</jdbc:inbound-endpoint>    
<jdbc:inbound-endpoint queryKey="SelectSomeBR"
connector-ref="ProConnector" doc:name="SomeBRFromPro"
pollingFrequency="1000" queryTimeout="-1">
<jdbc:transaction action="NONE" timeout="10" />
<jdbc:query key="SelectSomeBR"
    value="SELECT * from table2 where IsProcessed = 0 and ParentID = #[map-payload:ID]" />
<jdbc:query key="SelectSomeBR.ack"
value="update table2 set IsProcessed=1 where ParentID = #[map-payload:ID] " />
</jdbc:inbound-endpoint>
.
.
.
.
</flow>

如有任何帮助,我们将不胜感激。 谢谢。

您需要为第二个查询使用 出站 select 查询,例如:

<jdbc:outbound-endpoint queryKey="SelectSomeBR"
  connector-ref="ProConnector" doc:name="SomeBRFromPro"
  pollingFrequency="1000" queryTimeout="-1"
  exchange-pattern="request-response">
  <jdbc:transaction action="NONE" timeout="10" />
  <jdbc:query key="SelectSomeBR"
    value="SELECT * from table2 where IsProcessed = 0 and ParentID = #[map-payload:ID]" />
  <jdbc:query key="SelectSomeBR.ack"
value="update table2 set IsProcessed=1 where ParentID = #[map-payload:ID] " />
</jdbc:outbound-endpoint>

参考:https://developer.mulesoft.com/docs/display/current/JDBC+Transport+Reference#JDBCTransportReference-OutboundSELECTQueries

PS。此旧表达式语法已过时:#[map-payload:ID] 改用 MEL:#[message.payload.ID]"(假设消息负载是一个带有名为 ID 的键的映射)。