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