Marvin Yu
Marvin Yu
你这种是三方包,他这个应该只提供基于JDK。。
> 这样节点1发起选举时,节点2由于能够和**当前leader节点1**正常通讯,因此会拒绝节点1的预投票prevote,从而避免了上述问题。 这个描述需要修改为 【当前leader节点3】
谢谢,我重新尝试下;我配置了这个参数,没看你底层实现 @jayknoxqu 这是我的配置 ftpClient.setControlKeepAliveTimeout(ftpClientConfig.getControlKeepAliveTimeout()); 应该是服务器端口被关闭了,目前没有其他办法。
https://stackoverflow.com/questions/51730863/ftpclient-how-to-get-around-org-apache-commons-net-io-copystreamexception-ioexc 看了下,还没想到很好的办法 @jayknoxqu
> 你不会是sftp吧? 还真不是,就是普通的FTP。我不使用池化的方法还行,但是一起用池化的;就 at org.apache.commons.net.ftp.FTPClient.changeWorkingDirectory(FTPClient.java:1167) 最后看到底层还是那个流 flush 异常
> "我不使用池化的方法还行,但是一起用池化的",能具体描述下么我这边没办法复现出来,是像测试类里那样使用么? 多线程一次性发送100张图片到FTP服务器,使用FTPClientPool就会出现了;如果是使用 new FTPClient不会出现这种情况
> 你能贴下代码么? > https://github.com/jayknoxqu/ftp-pool/blob/master/src/test/java/com/zhenjin/ftp/FtpClientPoolTest.java /** * @author marvinYu * 用于测试 ftpClientTemplate:uploadFile 在Linux环境下与windows下面是否有区别 * @version : LinuxFTPUploadTestJob.java, v 0.1 2019-02-13 18:01 Exp $ */ @JobHandler(value = "linuxFTPUploadTestJob") @Service public class LinuxFTPUploadTestJob...
> FtpClientPool是标记为不弃用的; > 正确使用连接池的方式是使用commons-pool2 提供的 > > ``` > GenericObjectPool ftpClientPool=new GenericObjectPool(ftpClientFactory); > ``` > 方法创建连接池 这个没有问题,我看了common-pool的实现是一致的。
@jayknoxqu windows环境下,长期观察下。就可以看到这个 org.apache.commons.net.ftp.FTPConnectionClosedException: FTP response 421 received. Server closed connection. at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:388) at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:300) at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:523) at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:648) at org.apache.commons.net.ftp.FTP.cwd(FTP.java:868) at org.apache.commons.net.ftp.**FTPClient.changeWorkingDirectory(FTPClient.java:1167)** at com.yinghuo.fundgateway.util.ftp.FtpClientTemplate.uploadFile(FtpClientTemplate.java:51) at com.yinghuo.fundgateway.biz.task.job.temp.LinuxFTPUploadTestJob.lambda$doExecute$0(LinuxFTPUploadTestJob.java:41) at java.lang.Thread.run(Thread.java:745)
public FtpClientTemplate(FtpClientFactory ftpClientFactory) { this.ftpClientPool = new GenericObjectPool(ftpClientFactory); **this.ftpClientPool.setTestOnBorrow(true); this.ftpClientPool.setTestOnCreate(true); this.ftpClientPool.setTestOnReturn(true); this.ftpClientPool.setTestWhileIdle(true); this.ftpClientPool.setMinEvictableIdleTimeMillis(60000);** } 加了这个之后,看到异常堆栈。校验到Connection已经异常了 @jayknoxqu 对比了下,目前这个按照common-pool实现还是有很多优化空间。可能要像C3P0那样对于GenericObjectPool 处理下更适用于生产环境