0

这个问题与thisthis密切相关。默认情况下,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 会有这样的行为?

4

1 回答 1

1

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

于 2017-03-20T19:03:02.190 回答