Mule:根据文件可用性同步Mule流

Mule:根据文件可用性同步Mule流,mule,mule-studio,Mule,Mule Studio,我有两个流处理nodes.flow和relationships.flow,最终这两个流都写入数据库 节点和关系从单独的tsv文件读取,并通过fileconnector端点读取 我希望同步流,以便nodes.tsv始终在relationships.tsv之前得到处理。大概是这样的: 如果仅存在nodes.tsv-处理它 如果仅存在relationships.tsv,请等待nodes.tsv显示在磁盘上,然后在relationships.tsv之前处理nodes.tsv 有什么想法吗 谢谢默认情

我有两个流处理nodes.flow和relationships.flow,最终这两个流都写入数据库

节点和关系从单独的tsv文件读取,并通过fileconnector端点读取

我希望同步流,以便nodes.tsv始终在relationships.tsv之前得到处理。大概是这样的:

  • 如果仅存在nodes.tsv-处理它
  • 如果仅存在relationships.tsv,请等待nodes.tsv显示在磁盘上,然后在relationships.tsv之前处理nodes.tsv
有什么想法吗


谢谢

默认情况下,当文件出现在目标目录中时,文件端点将进行处理,因此我将省去其中一个端点,而在主端点中,只需像这样拉入从属文件:

muleClient.request('file://D:/foo/in', -1);

或者,在从属流上使用文件名筛选器,然后让主流重命名从属目录中的文件以匹配文件筛选器。

读取规范时,您需要的唯一文件入站端点是等待nodes.tsv文件的端点

拾取此文件后,按预期处理它

然后,在流程中进一步使用:

    <scripting:component>
        <scripting:script engine="groovy"><![CDATA[
          muleContext.client.request('file:///....../relationships.tsv', eventContext.timeout)
        ]]></scripting:script>
    </scripting:component>

    <message-filter throwOnUnaccepted="false">
        <not-filter>
            <payload-type-filter expectedType="org.mule.transport.NullPayload" />
        </not-filter>
    </message-filter>


以拾取关系文件。如果它不存在,过滤器将停止那里的流动。如果它存在,那么流中的后续内容将能够处理它。

感谢。。我喜欢第二个主意。但是关于你的第一个想法,如果两个文件同时存在,我怎么能让nodes.tsv优先于relations.tsv呢?关于你的第二个想法。。我考虑使用file:outbound端点,但它引用了“当前”传输到流中的文件。如何使其引用磁盘上要重命名的文件?(要通过文件筛选器)使用2个独立的入站端点作为优先级。一旦它重命名,事件将在从属流上触发感谢David,抱歉之前没有机会尝试此功能。。这个解决方案很优雅。。但是我的要求已经改变了,所以我不能按原样使用它。我会记住这一点,以备将来使用。。