Mule文件入站端点fileAge无法正常工作

时间:2015-12-23 19:31:36

标签: file mule

在使用mule 3.7 EE的简单流程中,我们正在监视文件目录,以便使用File inbound-endpoint移动它们。我将参数设置为以5分钟为间隔(300000ms)进行轮询,并且需要相同的fileAge(300000ms)。这在开发盒上的Anypoint环境中工作正常,但在部署到企业服务器时无法移动文件。

我将fileAge参数降低到150000ms,然后降低到30ms,结果相同。将日志记录置于DEBUG模式会显示每隔5分钟找到该文件,但随后被拒绝:“DEBUG org.mule.transport.file.FileMessageReceiver - 文件还没有足够老化”,即使fileAge减少到30ms。该文件在20个小时前被放入目录,并且自那时起未被修改,目录显示与此匹配的文件的时间/日期。已经在文件和目录上验证了权限,并且流程正在定位文件,只是不接受它已经足够大以满足条件,并且这仅在网络环境中失败。

有什么想法吗?是否有可能在全局级别更改age参数的单位,以便将其读取为天而不是毫秒?我们环境中的其他应用程序报告了与SFTP端点类似的问题,您可以使用checkFileSizeTime来避开这种情况,但不能使用File选项。

以下是流程的简化形式,使用age参数的连接器而不是将其放入端点:

<file:connector name="fileConnector" doc:name="myFile"   fileAge="${MinSourceAge}" >
</file:connector>

<!-- Monitor source folder for files.  When found, move and archive them. -->
<flow name="printFlow">

     <file:inbound-endpoint path="${SourcePath}" 
                           pollingFrequency="${PollingFrequency}" 
                           responseTimeout="10000"
                           connector-ref="fileConnector" 
                           doc:name="GetPrintFile">
        <file:filename-regex-filter pattern="${SourcePattern}" caseSensitive="false"/>
    </file:inbound-endpoint>

    <logger message="#[message.inboundProperties.originalFilename] being sent to print dispatch." level="INFO" doc:name="Logger"/>

    <file:outbound-endpoint responseTimeout="10000" doc:name="Send To Archive" 
                            outputPattern="${ArchiveName}" 
                            path="${ArchivePath}" />
</flow>

流本地工作正常,只有在部署到企业服务器时才会失败。我创建了一个不使用age参数的测试流,然后对Mule类应该使用的System.getCurrentMillis()进行相同的调用,这次我记录它并且它所声明的文件中的lastModified时间戳不够老这些时间戳应该通过测试。是的,我已经通过属性文件删除了值的设置,并将参数直接放入流中。它以正确的轮询速率找到正确的文件,但未通过年龄测试。

1 个答案:

答案 0 :(得分:0)

好的,我忘记了发布这个问题,当我了解到正在发生的事情时,我应该自己回答这个问题。

这是m子中的错误。它已提交给他们。

错误是,当将文件使用期限参数添加到文件端点时,Mulesoft(错误地)将这些信息保留在实例中,而不是随实例保留此信息,因此现在频率适用于所有实例,不只是声明的那个。

如果使用不同的文件年龄参数声明了第二个端点,则该端点将再次被覆盖并成为默认值,因此,启动时最后扫描的那个值将成为每个端点的默认值。如果声明一个端点的文件使用期限为10秒,而另一个端点的使用期限为10天,则它可以是根据代码顺序的值,也可以是加载文件的顺序,但是所有端点将应用相同的值。

此问题的解决方法是,如果您想要多个文件年龄参数,则需要通过连接器而不是直接在端点上进行操作。