2012-04-23 68 views
1

我的Mule ESB服务器上有一个文件夹,有几个源可以指向(一个SCP,一个SFTP以及其他)。 每当我检测到一个文件,我想将它移动到另一个目录。问题是,我正在移动部分完成的文件,导致我丢失数据。Mule ESB:如何检测部分文件以避免传输部分上传的文件?

我试过使用文件的“文件”属性,但它似乎不能可靠地工作。我试图尽可能保持延迟,因为大多数文件将是< 10kb,但有些需要大到100mb。

有没有什么办法可以知道一个文件是不是一个部分,而不是一个完整的?我知道WinSCP使用.filepart扩展名,但这只是针对一个应用程序,甚至可以在WinSCP的首选项中更改(或完全删除)该扩展名。

+0

您使用fileAge获得了哪些可靠性问题?如果它是一个错误,也许值得打开一个JIRA @ MuleSoft?这就是说,保持延迟低和可靠性高的最佳选择是强制使用控制文件(如.filepart)并创建一个特定的过滤器来查找它。 – 2012-04-24 00:12:39

+2

实际上,多进行一次测试,结果发现问题出在操作系统级别。在RedHat上,“上次修改时间”时间戳每更新约1000毫秒,为4kb文件创建过大的延迟时间。在Windows上更糟糕:“最后修改”仅在传输开始时设置,然后在完成时重置。 MuleSoft团队从技术上讲是正确的,可以从这个时间戳中获取fileAge,但操作系统并没有经常更新它的工作。他们应该使用文件**大小**。我会提交一份变通票。 – Bing 2012-04-24 12:59:27

+0

这是很棒的发现。 – 2012-04-24 14:57:44

回答

2

我解决了我自己的问题。

随着更多的测试,事实证明问题是在操作系统级别。在RedHat上,“上次修改时间”时间戳每更新约1000毫秒,为4kb文件创建过大的延迟时间。在Windows上更糟糕:“最后修改”仅在传输开始时设置,然后在完成时重置。 MuleSoft团队从技术上讲是正确的,可以从这个时间戳中获取fileAge,但操作系统并没有经常更新它的工作。他们应该使用文件大小来代替。我会提交一份变通票。

+0

我发现了同样的问题。你能发布你的解决方法吗? – 2012-05-30 14:29:10

+0

嗨费尔南多,对于迟到的回复抱歉,只看到了你的评论。 我正在使用自定义转换器来检查文件大小,而不是上次修改时间。 (检查大小 - >睡眠X毫秒 - >再次检查大小:如果大小相同,则假设完成。)祝你好运! – Bing 2012-08-29 21:28:25