scala - 为什么我的 Alpakka SFTP 连接器从不连接?
问题描述
我是 Alpakka/Akka Streams 的新手,我正在尝试设置一个流,在其中我在两个 SFTP 服务器之间流式传输数据,而我的系统位于中间,这是代码。
import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.alpakka.ftp.scaladsl.Sftp
import akka.stream.alpakka.ftp.{FtpCredentials, SftpSettings}
import akka.stream.scaladsl.Keep
import net.schmizz.sshj.{DefaultConfig, SSHClient}
import java.net.InetAddress
class StreamingSftpTransport {
implicit val system: ActorSystem = ActorSystem("dr-service")
implicit val materializer: ActorMaterializer = ActorMaterializer()
private val PORT = 22
private val USER = "testsftp"
private val CREDENTIALS = FtpCredentials.create(USER, "t3st123")
private val BASEPATH = s"/home/$USER"
private val FILE_NAME = "testfile"
// Set up the source system connection
private val SOURCE_HOSTNAME = "host1"
private val sourceSettings = SftpSettings.apply(host = InetAddress.getByName(SOURCE_HOSTNAME))
.withCredentials(CREDENTIALS)
.withPort(22)
private val sourceClient = new SSHClient(new DefaultConfig)
private val configuredSourceClient = Sftp(sourceClient)
// Set up the destination system connection
private val DEST_HOSTNAME = "host2"
private val destSettings = SftpSettings.apply(host = InetAddress.getByName(DEST_HOSTNAME))
.withCredentials(CREDENTIALS)
.withPort(22)
private val destClient = new SSHClient(new DefaultConfig)
private val configuredDestClient = Sftp(destClient)
/**
* Execute the stream from host1 to host2
*/
def doTransfer(): Unit = {
val source = configuredSourceClient.fromPath(s"$BASEPATH/$FILE_NAME", sourceSettings)
val sink = configuredDestClient.toPath(s"$BASEPATH/$FILE_NAME", destSettings)
val runnable = source.toMat(sink)(Keep.right).run()
}
}
我已经从单元测试中调用了它,new StreamingSftpTransport.doTransfer()
但它从未尝试连接。我究竟做错了什么?
解决方案
正如 artur 在对我的问题的评论中所建议的那样,我并没有阻止未来,因此 JVM 在建立连接之前就退出了。
添加以下行允许建立连接
Await.result(runnable, 180 seconds)
PS:不要在生产中这样做:)
推荐阅读
- hash - 如何在局部敏感散列 (LSH) 中将签名矩阵散列到存储桶
- spring - 为什么我在尝试模拟 WebClient 调用时会在 bodyValue 上获得 NPE?
- rust - 如何避免这个程序的 for 循环和 let 语句
- ios - 在 Objective-C 和 Swift 中编写不返回任何参数且不接受参数的闭包的所有有效方法是什么?
- javascript - 如何在 Vanilla JS 中编写:$(function() {...}?
- javascript - Javascript - 循环延迟 | 为什么这不起作用?
- javascript - 如何使用 socket.io 进行简单的消息传递并响应 useEffect()
- android - 撰写导航中没有方法导航(字符串)
- android - WorkManager 在继续下一个工作请求之前等待上传完成
- c++ - 深度图像的空间和时间平均