【问题标题】:Java, FTP And Multiple ConsumersJava、FTP 和多个消费者
【发布时间】:2013-06-19 20:34:58
【问题描述】:

FTPClient 有什么方法可以获取特定 ftp 服务器允许的同时连接数?还有随时可用的连接数?

我的问题如下 我有一个队列,消费者将从中读取数据并创建一个文件。目前队列有 3 个消费者(Spring JMS 并发消费者),但这个数字会增加,并且会添加更多监听队列的服务器。

当我将消费者更新为 100 时,我收到连接失败的错误消息。 任何人都可以推荐一种设计模式或库,以允许任意数量的消费者通过 ftp 访问特定的服务器。例如,如果有 100 个文件和 100 个消费者,如果每个消费者可以 ftp 1 个文件或一些可以 ftp 10 个文件等,这将是所需的方法。我想将负载分配给多个消费者和/或服务器

非常感谢任何帮助

谢谢 达米安

【问题讨论】:

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


    【解决方案1】:

    如果可以切换到 SFTP,Jsch 库支持通过单个物理连接打开多个通道。

    否则,您可以实现一个 FTP 客户端池并在没有可用客户端时阻止消费者。当消费者完成其操作时,将客户端返回到池中并唤醒所有等待的线程。您可能只需要一个简单的BlockingQueue

    不过,大多数服务器都会使空闲连接超时,因此在从池中获取连接时,您必须处理断开的连接。

    最后,如果您使用 Spring Integration 而不是自己滚动,则可以将 FTP 出站通道适配器配置为使用 CachingSessionFactory,它会为您处理池。

    【讨论】:

    • 感谢加里的回复。我会看看 Jsch 谢谢。 BlockingQueue 可以工作,但如果超过 1 个服务器正在从队列中读取数据,我认为这不是正确的选择
    • 没错,但您可以通过这种方式限制来自每个服务器的连接。
    • 真正的加里,但它会是最优的吗?如果 ftp 服务器允许 10 个连接,我们能否以聪明的方式告诉每个服务器允许多少个连接?理想情况下,新服务器应该能够在不知道任何其他服务器的情况下启动
    猜你喜欢
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 2016-09-11
    • 2015-03-27
    • 2011-06-04
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多