我寫了一個駝峯(2.10)組件做Sftp,因爲我需要更多的控制連接比開箱即用的組件。持有Sftp連接打開駱駝組件內部和路由
我有路由看起來是這樣的:
from("direct:start")
.to(startProcessor()) //1. Start processor sets the connection parameters for myCustomSftpComp producer
.to("myCustomSftpComp") //2. Uses Jsch, connects to server, gets the file, add to exchange, closes connection
.to(somePostProcessor()) //3. Does something with the file
.to("file://...."); //4. Write the file
這一切都工作得很好。
我的問題是在第2步,此刻我的文件非常小,我將它們緩衝到內存中,將字節數組添加到Exchange主體並將其傳遞並處理,直到它被文件端點寫入。
當然,這不會是可持續的一個大文件,我需要添加InputStream引用到交換。我的問題是我關閉並清理到myCustomSftpComp內的服務器的連接,因此當交換機到達後處理器和文件端點時,將無法再訪問它。
所以基本上我需要一些方法來保持連接打開,直到文件被寫入並關閉組件內的服務器連接從路由定義中,聽起來不整潔,所以我打開這樣做的自由方式。
它是一個要求每次關閉連接,例如在路線的終點?如果您打開連接,則步驟2將重新使用以前的連接(如果它仍然連接)。所以你可以設置disconnect = false。 –
@Claus - 目標服務器上的資源使用是一個問題,所以我需要確保連接正確清理,因此當前實現。如果我在步驟2中斷開連接,有什麼方法確保在路線完成其工作後,即在步驟3或4之後關閉它? – tja
您需要擴展駱駝ftp組件(例如生產者),並在會話完成時將會話關閉邏輯移動到交換機上,例如我認爲我們在郵件組件中執行的操作有點類似於檢查郵件使用者。然後,當交換完成時,例如在第4步之後,將執行該邏輯。 –