FTPClient 有什么方法可以获取特定 ftp 服务器允许的同时连接数吗?还有随时可用的连接数?
我的问题如下 我当时有一个队列,消费者将从中读取数据并创建文件。目前该队列有 3 个消费者(Spring JMS 并发消费者),但这个数字将会增加,并且将添加更多监听该队列的服务器。
当我将消费者更新为 100 时,我收到连接失败的错误消息。 任何人都可以推荐一个设计模式或一个库,允许任意数量的消费者通过 ftp 传输到特定服务器。例如,如果有 100 个文件和 100 个使用者,如果每个使用者可以 ftp 1 个文件,或者某些使用者可以 ftp 10 个文件等,这将是所需的方法。我想将负载分配给多个消费者和/或服务器
非常感谢任何对此的帮助
谢谢 达米恩
最佳答案
如果您可以切换到 SFTP,Jsch 库支持通过单个物理连接打开多个 channel 。
否则,您可以实现一个 FTP 客户端池,并在没有可用客户端时阻止使用者。当消费者完成其操作时,将客户端返回到池中并唤醒任何等待的线程。一个简单的 BlockingQueue
可能就是您所需要的。
不过,大多数服务器都会使空闲连接超时,因此在从池中获取连接时,您必须处理断开的连接。
最后,如果您使用 Spring Integration 而不是自己滚动,则可以将 FTP 出站 channel 适配器配置为使用 CachingSessionFactory
,它会为您处理池化。
关于Java、FTP 和多个消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17189554/