我正在尝试使用MuleSoft版本3.8.5中的Mule Requestor从远程SFTP服务器读取文件。我可以在日志中看到与远程SFTP服务器已建立连接,但是在关闭连接时会引发如下错误:
Error occurred while closing file fileName.dat
java.io.IOException: Pipe closed
我不确定是由于文件长度,连接超时还是其他原因造成的。
在Mule请求者之后,字节数组到字符串转换器在那里。并抛出异常:
Could not close stream
java.io.IOException: Pipe closed
at java.io.PipedInputStream.read(PipedInputStream.java:307)
at java.io.PipedInputStream.read(PipedInputStream.java:377)
at com.jcraft.jsch.ChannelSftp.fill(ChannelSftp.java:2909)
at com.jcraft.jsch.ChannelSftp.header(ChannelSftp.java:2935)
at com.jcraft.jsch.ChannelSftp.access$500(ChannelSftp.java:36)
at com.jcraft.jsch.ChannelSftp$RequestQueue.cancel(ChannelSftp.java:1262)
at com.jcraft.jsch.ChannelSftp$2.close(ChannelSftp.java:1530)
任何建议或帮助都值得赞赏。
答案 0 :(得分:0)
这似乎发生在sftp连接被sftp服务器终止或被(例如)切断时。防火墙。我可以使用tcpkill (8)
命令来终止Mule运行时保持打开状态的sftp连接,从而重新创建问题。
使用具有驱逐时间的池配置文件似乎可行。
<sftp:config name="Upload_CSV_SFTP_Config" doc:name="SFTP Config" doc:id="88bf2e97-86d2-40fc-af79-536ec838f2d2" >
<sftp:connection host="${secure::transfer.sftp.hostname}" port="${secure::transfer.sftp.port}" username="${secure::transfer.sftp.username}" knownHostsFile="${secure::transfer.sftp.known_hosts_file}" identityFile="${secure::transfer.sftp.identity_file}" workingDir="${secure::transfer.sftp.directory}" passphrase="${secure::transfer.sftp.passphrase}">
<reconnection >
<reconnect frequency="30000" />
</reconnection>
<pooling-profile evictionCheckIntervalMillis="60000" initialisationPolicy="INITIALISE_NONE"/>
</sftp:connection>
</sftp:config>
在此之前,我曾尝试过将SFTP配置上的基本重新连接选项以及SFTP操作本身的选项进行各种组合,但似乎无济于事。我最初使用的一种“技巧”是在 SFTP Read 或<之前,放置一个路径为.
(当前目录)的 SFTP List 操作。 em>写入操作。