我正在使用Alpakka将单个文件上传到SFTP服务器,但是一旦文件上传并且获得成功响应,接收器将保持打开状态,如何将其排干?
我从这个开始:
val sink = Sftp.toPath(path, settings, false)
val source = Source.single(ByteString(data))
source
.viaMat(KillSwitches.single)(Keep.right)
.toMat(sink)(Keep.both).run()
.map(_.wasSuccessful)
但这最终永远不会离开地图步骤。 我试图添加一个killswitch,但这似乎没有任何效果(关闭或中止都没有):
val sink = Sftp.toPath(path, settings, false)
val source = Source.single(ByteString(data))
val (killswitch, result) = source
.viaMat(KillSwitches.single)(Keep.right)
.toMat(sink)(Keep.both).run()
result.map {
killswitch.shutdown()
_.wasSuccessful
}
我在根本上做错了吗?我只想要一个结果。
编辑:设置已发送到toPath
:
SftpSettings(InetAddress.getByName(host))
.withCredentials(FtpCredentials.create(amexUsername, amexPassword))
.withStrictHostKeyChecking(false)
答案 0 :(得分:2)
通过要求您在末尾加上Await.result(result, Duration.Inf)
,我想核对A. Gregoris所表达的理论。因此,要么是
Future
完成或result
如果您的应用未退出,则可以尝试使用result.onComplete
进行必要的工作。
答案 1 :(得分:1)
我看不到您的全部代码,但在我看来,您在摘要中发布了result
值是Future,它在程序执行结束之前尚未完成,这是因为{ {1}}也不被执行。