Akka Sink永远不会关闭

时间:2018-10-26 09:28:26

标签: scala akka akka-stream alpakka

我正在使用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)

2 个答案:

答案 0 :(得分:2)

通过要求您在末尾加上Await.result(result, Duration.Inf),我想核对A. Gregoris所表达的理论。因此,要么是

  • 您的应用在Future完成或
  • 之前退出
  • (如果您的应用未退出)功能,您在其中执行此操作会丢弃result

如果您的应用未退出,则可以尝试使用result.onComplete进行必要的工作。

答案 1 :(得分:1)

我看不到您的全部代码,但在我看来,您在摘要中发布了result值是Future,它在程序执行结束之前尚未完成,这是因为{ {1}}也不被执行。