2013-06-19 27 views
0

有什麼辦法可以通過FTPClient獲得特定FTP服務器允許的同時連接數量?同時還有可用連接的數量?Java,FTP和多個消費者

我的問題如下 我有一個隊列,消費者將讀取數據和創建文件。目前有3個消費者(Spring JMS併發使用者)用於隊列,但是這個數量會增加,並且會有更多的服務器在監聽隊列。

當我更新消費者爲100時,我收到連接失敗的錯誤。 任何人都可以推薦一種設計模式或庫,它允許任意數量的消費者ftp到特定的服務器。如果例如有100個文件和100個消費者,如果每個消費者可以ftp 1個文件或一些可以ftp 10個文件等等,那將是期望的方法。我想在多個用戶和/或服務器

拆分負載任何幫助,這是非常讚賞

感謝 達明

回答

1

如果你可以切換到SFTP,在Jsch庫支持在打開多個通道一個物理連接。

否則,您可以實施一個FTP客戶端池,並在沒有可用客戶端時阻止使用者。當消費者完成其操作時,將客戶端返回到池並喚醒任何等待的線程。一個簡單的BlockingQueue可能是你所需要的。

雖然大多數服務器會超時閒置連接,所以當從池中獲取連接時,您必須處理斷開的連接。

最後,如果您使用Spring集成而不是自行滾動,則可以將FTP出站通道適配器配置爲使用CachingSessionFactory,該處理池爲您處理。

+0

感謝加里的迴應..我會看看Jsch謝謝。 BlockingQueue會工作,但我不認爲這是正確的選擇,如果超過1服務器正在隊列中讀取 – Damien

+1

是真的,但你可以限制每個服務器的連接。 –

+0

真正的加里,但它會是最佳?如果ftp服務器允許10個連接,我們可以智能地告訴每個服務器允許多少個連接?理想情況下,新服務器應該能夠在不知道任何其他服務器的情況下啓動 – Damien

相關問題