【发布时间】:2016-03-30 06:58:32
【问题描述】:
在使用 mule 3.7 EE 的简单流程中,我们正在监视目录中的文件以使用文件入站端点移动它们。我将参数设置为以 5 分钟间隔(300000 毫秒)轮询一次,并且需要相同的文件年龄(300000 毫秒)。这在开发盒上的 Anypoint 环境中运行良好,但在部署到企业服务器时无法移动文件。
我将 fileAge 参数降低到 150000 毫秒,然后降低到 30 毫秒,结果相同。将日志记录置于 DEBUG 模式表明每 5 分钟找到一次文件,但随后被拒绝:“DEBUG org.mule.transport.file.FileMessageReceiver - 该文件还没有老化到足够的时间”,即使 fileAge 减少到 30 毫秒。该文件在 20 多小时前被放入目录中,此后一直没有被修改过,并且目录显示了与此匹配的文件的时间/日期。文件和目录的权限已经过验证,流程正在定位文件,根本不接受它已经足够老以满足标准,这只会在网络环境中失败。
有什么想法吗?是否可以在全局级别更改年龄参数上的单位,例如将其读取为天而不是毫秒?我们环境中的其他应用程序报告了与 SFTP 端点类似的问题,因此您可以改用 checkFileSizeTime 来逃避这种情况,但不能使用 File 选项。
这是流程的简化形式,使用连接器作为年龄参数,而不是将其放入端点:
<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 时间戳不够旧这些时间戳应该通过测试。是的,我已经通过属性文件删除了值的设置,并将参数直接放入流程中。它以正确的轮询速率找到正确的文件,但未通过年龄测试。
【问题讨论】:
-
您是在连接器
file:connector还是在入站端点file:inbound-endpoint中使用“文件年龄”属性?查看文档:docs.mulesoft.com/mule-user-guide/v/3.7/… -
我碰巧在端点上有它,但我的理解是要么应该表现相同。如果该值在连接器上,则适用于引用该连接器的所有端点,而如果在端点上,则仅适用于该端点。
-
可以添加端点和连接器的配置xml吗?