我编写了一个 Camel (2.10) 组件来执行 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 内的服务器的连接,因此当交换到达后处理器和文件端点时,将无法再访问它。
所以基本上我需要一些方法来保持连接打开,直到文件被写入并从路由定义中关闭组件内的服务器连接,这听起来很不整洁,所以我愿意接受其他方法。