同一流程中的多个文件InBound端点

时间:2014-06-15 06:55:06

标签: mule

我有两个目录,我想从中选择文件并将其发送到SFTP服务器,但我想首先发送directory1文件,如果它成功,那么我只需要从directory2发送文件。如何实现这个处理顺序?

3 个答案:

答案 0 :(得分:1)

Batch Processing documentation中,您会看到error handling的条目,其中说明了以下内容(我的重点):

  

处理批处理作业时,有时会发出骡子消息   批处理步骤中的处理器可能发现自己无法处理记录。   发生这种情况时 - 可能是因为记录损坏或不完整   数据 - Mule有三个处理记录级错误的选项:

     
      
  • 停止处理整个批次跳过任何剩余的批处理步骤并将所有记录推送到完成阶段(理想情况下,您可以   设计了一份报告,通知您失败的记录)

  •   
  • 继续处理批处理而不管任何记录失败,使用过滤器指示后续批处理步骤如何处理失败   记录

  •   
  • 继续处理批处理而不管任何失败的记录(使用过滤器指示后续批处理步骤如何处理失败   记录),直到批处理作业累积最大失败次数   记录,此时Mule将所有记录推送到On Complete   阶段(理想情况下,您设计了一份报告以通知您   记录失败)
  •   
     

默认情况下,Mule的批处理作业遵循第一个错误处理选项   一旦Mule遇到一个单一的,它就会停止处理   记录级错误。

因此,要执行您需要的操作,您需要创建一个批处理作业,首先处理directory1,然后将max-failed-records设置为0

答案 1 :(得分:1)

1)创建2个流程: - Flow1和Flow2
 2)配置带有文件入站端点的流和2个不同的文件夹.....  3)现在假设Flow1需要先执行,然后流2需要执行,使流2的初始状态属性停止。(因此流的文件入站端点不会从目录中选择文件)... ...  4)在执行发生后在流程1中放置一个流程参考,以便它调用流程2 ...这样它将按顺序发生 例如: -

<flow name="flow1" doc:name="f1">
<file:inbound-endpoint path="C:\folder1" responseTimeout="10000" doc:name="File" />
<!-- Do your busssiness proccess -->

 <!--Start the flow2 -->    
 <scripting:component doc:name="Script">
     <scripting:script engine="groovy">
            muleContext.registry.lookupFlowConstruct('flow2').start()
     </scripting:script>
 </scripting:component>

  <!-- Now call the second flow using Flow ref -->
   <flow-ref name="flow2" doc:name="Flow Reference"/>
  </flow>

 <flow name="flow2" doc:name="f2" initialState="stopped">
 <file:inbound-endpoint path="C:\folder2" responseTimeout="10000" doc:name="File" />

   <!-- Do your busssiness proccess -->
  </flow>

答案 2 :(得分:1)

我看到的更好的解决方案是使用Mule Module Requester来读取第二组文件以便稍后处理它们。从链接下载Studio或Mule ESB独立jar,并编写如下配置:

<mule xmlns:mulerequester="http://www.mulesoft.org/schema/mule/mulerequester" 
    xmlns:file="http://www.mulesoft.org/schema/mule/file" 
    xmlns="http://www.mulesoft.org/schema/mule/core"
    xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.mulesoft.org/schema/mule/jersey http://www.mulesoft.org/schema/mule/jersey/current/mule-jersey.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/mulerequester http://www.mulesoft.org/schema/mule/mulerequester/current/mule-mulerequester.xsd">
    <file:connector name="File1" autoDelete="true" streaming="false" validateConnections="true" doc:name="File"/>
    <file:endpoint path="/temp/in2" name="File2" responseTimeout="10000" doc:name="File"/>
    <flow name="main" doc:name="main">
        <file:inbound-endpoint path="/temp/in1" responseTimeout="10000" doc:name="File" connector-ref="File1"/>
        <mulerequester:request resource="File2" returnClass=""/>
        <logger level="ERROR"/>
    </flow>
</mule>