【问题标题】:multiple inbound database endpoint in 1 flow1 个流中的多个入站数据库端点
【发布时间】:2013-09-06 23:28:46
【问题描述】:

我正在尝试创建一个流,其中可能存在多个数据库入站端点。流程如下:

  1. 从表 X 数据库 A 中获取 X.status(表 X 列状态)= 'new' 的行。
  2. 从表 Y 数据库 B 中获取行,其中 Y.some_id = X.another_id。 X 是从步骤 (1) 中检索到的数据行。
    1. 向表 Z 数据库 B 中插入新行。

我意识到可能有一个数据库入站端点。有什么办法可以用 Mule 完成这个吗?

环境:Mule 3.4

【问题讨论】:

    标签: mule


    【解决方案1】:

    您可以利用<composite-source />scope 在您的流程中声明多个消息源。

    基本上你的流程应该是这样的:

    <flow ... >
    <composite-source>
    <jdbc:inbound-endpoint ... />
    <jdbc:inbound-endpoint ... />
    </composite-source>
    ...
    </flow>
    

    This documentation page应该会为你提供更多关于topc的信息

    【讨论】:

      【解决方案2】:

      您的第一个数据库调用将是入站的,第二个将是出站的。由于第一个 DB 调用是从数据库中读取数据,因此它将是入站调用,而第二个调用是接收数据,这意味着它将是一个出站调用。

      步骤 1) 入站数据库调用 - 从数据库 A(表 X,列状态)读取。

      第 2 步)结果(有效负载)很可能是一个列表或地图列表。您可以使用 groovy 脚本查询各个字段并设置流变量。例如

      因为您有多行进入,所以使用集合拆分器拆分每一行记录非常重要。

      查询状态变量:#[flowVars['Var']['status']]。同样,您可以查询剩余的字段。

      现在您已从数据库 A 准备好数据集,为您的数据库 B 编写查询并使用流变量(如上所述)查询 Y.some_id。例如“其中 Y.some_id=#[flowVars['Var']['another_id']]”

      第 3 步)在同一个出站连接中,您可以在数据库 B(表 Z)中执行插入操作。使这一切成为可能的原因是您使用了特定的数据库连接器。

      几点建议: 1) 使数据库连接器和查询全局化(在流程之前) 2) 使用 HTTP 出站端点,以便您可以控制从浏览器运行的流。

      希望这会有所帮助。

      【讨论】:

      • 这是公认的答案。另外,我还在后续的数据库出站端点中使用了“Message Enricher”作用域
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      相关资源
      最近更新 更多