Java、FTP 和多个消费者

标签 java design-patterns ftp ftp-client spring-jms

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/

相关文章:

mysql - 是否可以使用 MySQL 命令访问 FTP 服务器?

java - 额外的 'if checks' 如果该值已经设置 - 什么更快,什么使用更多资源?

java - jQuery 模板和 Backbone.js

java - 如何消费Spring Cloud Stream中默认死信队列的消息?

java - MVP的具体代码示例

ftp - 在 docker (Debian wheezy) 中安装 pure-ftpd,错误 421

java - 无法让 Java maven 项目中的 Kotlin 类工作(Eclipse)

c# - Builder模式从数据库值而不是参数输入构造对象是否合适

c# - 工厂或服务模式或方法注入(inject)?

c++ - 如何修复此错误 : undefined reference to `__imp_InternetOpenA'