这个问题与this和this密切相关。默认情况下,SFTP 连接器流式传输处于打开状态且无法关闭(版本 3.5.2)。如果我有如下流程
1) 具有大轮询频率的入站 SFTP 连接器(例如以小时为单位)
2)文件出站将流存储到本地存储中的文件中
我在这里希望 SFTP 入站在传输完成后删除源文件。(但这不会发生)
阅读文档我发现以下内容
自动删除(仅适用于入站 SFTP 端点)。单击此框可在文件被读取后删除该文件。注意:如果 Mule 写入出站端点时发生错误,则不会删除该文件。仅当入站和出站端点都使用 SFTP 传输时,自动删除才有效。
有解决方法吗?,基本上,一旦我从 SFTP 服务器下载源文件,我该如何删除它?
以上主要是文档的问题,即使出站不是 SFTP 连接器,SFTP 自动删除也确实有效。我在这里记录了一个关于它的 JIRA
更新:
我已经确定了问题的根本原因,当部署在 cloudhub 上时,来自 SFTP 连接器的输出返回 class 的实例java.io.ByteArrayInputStream
,但是当通过 Anypoint studio 部署应用程序时,输出是 class 的实例org.mule.transport.sftp.SftpInputStream
。
要重现,请确保文件大小小于 2 MB
这会导致文件在 Cloudhub 上部署时不会被删除。
来自 cloudhub 的日志
本地部署日志
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
2015-04-28 15:37:50 INFO LoggerMessageProcessor:193 - InputSFTPEndpoint org.mule.transport.sftp.SftpInputStream
我的流程如下所示
更新 2:
但是,如果文件很大,我认为大约 10MB,则返回类型是com.google.common.io.MultiInputStream
并且文件确实被删除。
任何想法为什么 Cloudhub 会有这样的行为?