Mule 如果处理失败,请删除源目录中的文件

Mule 如果处理失败,请删除源目录中的文件,mule,Mule,我的要求是在入站端点处理文件 用例1-处理文件失败 如果由于某些异常(如验证错误)导致文件处理失败,请将文件移动到与源不同的单独目录。删除源目录中的原始文件 用例2-成功处理 如果文件处理成功,则将文件保留在源目录中 我尝试了以下操作,文件被移动到失败的目录,但是源文件没有按照用例1中的要求被删除 <flow name="InValidFlow1" doc:name="InValidFlow1"> <file:inbound-endpoint responseTimeout="

我的要求是在入站端点处理文件

用例1-处理文件失败

如果由于某些异常(如验证错误)导致文件处理失败,请将文件移动到与源不同的单独目录。删除源目录中的原始文件

用例2-成功处理

如果文件处理成功,则将文件保留在源目录中

我尝试了以下操作,文件被移动到失败的目录,但是源文件没有按照用例1中的要求被删除

<flow name="InValidFlow1" doc:name="InValidFlow1">
<file:inbound-endpoint responseTimeout="10000" doc:name="File"  path="c:\filelanding\in2" pollingFrequency="100" connector-ref="input_2" moveToDirectory="c:\filelanding\in2" moveToPattern="#[header:originalFilename]-#[function:dateStamp]-Processed">
<file:filename-regex-filter pattern="(?!.*Processed|.*Failed)(.*)" caseSensitive="false"/>
</file:inbound-endpoint>
<test:component waitTime="20000"></test:component>
<custom-transformer class="com.XXX.XXX.service.ExceptionService" doc:name="Java"/>
<file:outbound-endpoint responseTimeout="10000" doc:name="File" path="c:\filelanding\out2" connector-ref="output_2"/>
<exception-strategy ref="fot_exception_strategy_single" doc:name="Reference Exception Strategy"/>
</flow>
<file:connector name="error_output_1" outputPattern="#[header:originalFilename]" doc:name="File"/>
<choice-exception-strategy name="fot_exception_strategy_single">
<catch-exception-strategy when="#[exception.causedBy(java.lang.RuntimeException)]" doc:name="Catch Exception Strategy">
<!-- Mark the status as failed-->
<file:outbound-endpoint connector-ref="error_output_1" responseTimeout="10000" doc:name="File" path="c:\filelanding\backup2" outputPattern="#[header:originalFilename]-#[function:dateStamp]-Failed" >
</file:outbound-endpoint>
</catch-exception-strategy>
</choice-exception-strategy>


我是否需要覆盖任何现有的mule功能来实现此行为。失败时的源文件夹不应包含该文件。目标文件夹应将文件标记为“失败”状态

对于用例1,在异常策略中,使用MEL表达式组件中的
originalFilename
中的值将文件移动到您想要的任何位置

您可以使用
org.mule.util.FileUtils.moveFileWithCopyFallback()
来解决这个问题


PS.
#[header:originalFilename]
是旧式表达式语法,在Mule 3.3及更高版本上使用MEL
#[message.inboundProperties.originalFilename]
对于用例1,在异常策略中,使用MEL表达式组件中的
originalFilename
中的值将文件移动到任何需要的位置

您可以使用
org.mule.util.FileUtils.moveFileWithCopyFallback()
来解决这个问题


PS.
#[header:originalFilename]
是旧式的表达式语法,在Mule 3.3及以上版本上使用MEL
#[message.inboundProperties.originalFilename]

我看不出用例2是如何工作的:如果文件保持在同一目录中,Mule将反复轮询它。谢谢David,当前,在处理后,我将文件标记为已处理并放置在同一目录中。在文件入站端点,我使用filename regex过滤器跳过已处理的文件。我的问题是,如果消息流中出现异常,我需要将文件从源目录移动到另一个目录,并删除源目录中的原始文件(用例1)。我不知道用例2如何工作:如果文件仍在同一目录中,Mule将反复轮询它。谢谢David,当前,在处理后,我将文件标记为已处理并放置在同一目录中。在文件入站端点,我使用filename regex过滤器跳过已处理的文件。我的问题是,如果消息流中出现异常,我需要将文件从源目录移动到另一个目录,并删除源目录中的原始文件(用例1)。我使用了FileUtils.moveFileWithCopyFallback(sourceFile,destinationFile),在异常策略中定义的java组件中,但源文件未被删除。因此,在异常策略中,我删除了文件出站端点并添加了java组件。关于此问题的任何帮助,因为longSo
moveFileWithCopyFallback
复制但不删除?如果是,那可能是因为入站端点仍在打开该文件。如果是这种情况,请在Java组件中尝试在负载上使用
IOUtils.closequiety()
,因为我怀疑它的流内容是保持文件打开的原因。我使用了FileUtils.moveFileWithCopyFallback(sourceFile,destinationFile),在异常策略中定义的java组件中,但源文件未被删除。因此,在异常策略中,我删除了文件出站端点并添加了java组件。关于此问题的任何帮助,因为longSo
moveFileWithCopyFallback
复制但不删除?如果是,那可能是因为入站端点仍在打开该文件。如果是这种情况,请在Java组件中尝试在负载上使用
IOUtils.closequityle()
,因为我怀疑它的流内容是保持文件打开的原因。