此问题与this和this密切相关。使用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的日志
本地部署日志
org.mule.transport.sftp.SftpInputStream
2015-04-28 15:37:50 INFO LoggerMessageProcessor:193 - InputSFTPEndpoint org.mule.transport.sftp.SftpInputStream
我的流程如下所示
更新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会表现得像这样?
答案 0 :(得分:1)
我是Mulesoft的新手,我遇到了同样的问题。我发现Mulesoft锁定了它正在读取的文件。对于我的特定场景,我正在阅读文件然后上传到Fusion(云)。 Mulesoft不会自动删除该文件。当它再次轮询文件夹路径时,它会在那里看到相同的文件并尝试再次读取它。我们必须做什么来强制释放文件,就是在字符串中添加一个字节数组。它似乎迫使Mulesoft完整地读取文件并转换有效载荷,从而切断文件上的锁定。