为什么SFTP入站(部署在Cloudhub上)在传输完成后删除文件

时间:2015-04-21 23:02:52

标签: mule sftp cloudhub

此问题与thisthis密切相关。使用SFTP连接器时,默认情况下启用流式传输,无法关闭(版本3.5.2)。如果我有如下的流程

1)具有较大轮询频率的入站SFTP连接器(例如,以小时为单位)

2)文件出站以将流存储到本地存储中的文件

我希望SFTP入站在传输完成后删除源文件。 (但这不会发生)

阅读documentation我找到了下面的

  

自动删除(仅适用于入站SFTP端点)。单击此框可在读取文件后删除该文件。注意:如果Mule写入出站端点时发生错误,则不会删除该文件。仅当入站和出站端点都使用SFTP传输时,“自动删除”才有效。

有解决方法吗?基本上,如果我从SFTP服务器下载源文件后该怎么删除?

以上主要是文档问题,即使出站不是SFTP连接器,SFTP自动删除也能正常工作。我已经记录了一个关于它的JIRA here

更新

我已确定问题的根本原因,当部署在cloudhub上时,SFTP连接器的输出返回类java.io.ByteArrayInputStream的实例,但是当通过Anypoint studio部署应用程序时,输出是类{{的实例1}}。

要重现,请确保文件大小小于2 MB

这会导致在Cloudhub上部署时不删除该文件。

来自cloudhub的日志

Cloudhub logs

本地部署日志

org.mule.transport.sftp.SftpInputStream

2015-04-28 15:37:50 INFO LoggerMessageProcessor:193 - InputSFTPEndpoint org.mule.transport.sftp.SftpInputStream

我的流程如下所示

Test flow

更新2:

但是,如果文件很大,我认为大约10MB,那么返回类型为2015-04-28 15:37:50 DEBUG SftpConnectionFactory:118 - Successfully connected to: sftp://decision_1:####@XXXXXXX:22/To_DI_Local 2015-04-28 15:37:50 DEBUG SftpClient:121 - Attempting to cwd to: /To_DI_Local 2015-04-28 15:37:50 DEBUG SftpConnector:121 - Successfully changed working directory to: /To_DI_Local 2015-04-28 15:37:50 DEBUG SftpMessageReceiver:121 - Routing file: ZCCR_EXTRACT_FINAL.CSV **2015-04-28 15:37:50 INFO LoggerMessageProcessor:193 - InputSFTPEndpoint org.mule.transport.sftp.SftpInputStream** 2015-04-28 15:37:50 DEBUG SftpMessageReceiver:121 - Routed file: ZCCR_EXTRACT_FINAL.CSV 2015-04-28 15:37:50 DEBUG SftpMessageReceiver:121 - Polling. Routed all 1 files found at sftp://decision_1:####@XXXXXX:22/To_DI_Local ,文件确实会被删除。

为什么Cloudhub会表现得像这样?

1 个答案:

答案 0 :(得分:1)

我是Mulesoft的新手,我遇到了同样的问题。我发现Mulesoft锁定了它正在读取的文件。对于我的特定场景,我正在阅读文件然后上传到Fusion(云)。 Mulesoft不会自动删除该文件。当它再次轮询文件夹路径时,它会在那里看到相同的文件并尝试再次读取它。我们必须做什么来强制释放文件,就是在字符串中添加一个字节数组。它似乎迫使Mulesoft完整地读取文件并转换有效载荷,从而切断文件上的锁定。