【问题标题】:Mule File inbound endpoint fileAge not working骡文件入站端点文件年龄不起作用
【发布时间】: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吗?

标签: file mule


【解决方案1】:

好的,我忘记发布了这个问题,当我知道发生了什么时我应该自己回答。

这是骡子的一个错误。它已提交给他们。

错误在于,当文件年龄参数添加到文件端点时,Mulesoft(错误)会覆盖默认文件年龄参数值,而不是将这些信息保存在实例中,因此频率现在适用于所有实例,不仅仅是它被声明的那个。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-28
    • 2013-11-28
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2017-03-15
    • 2015-12-05
    • 2023-03-30
    相关资源
    最近更新 更多