Акка Раковина никогда не закрывается

Я загружаю один файл на SFTP-сервер, используя Alpakka, но как только файл загружен, и я получил ответ об успешном завершении, мойка остается открытой, как я могу слить ее?

Я начал с этого:

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 ответа

Решение

Прося вас поставить Await.result(result, Duration.Inf) В конце я хотел проверить теорию, высказанную А. Грегорисом. Таким образом, это либо

  • ваше приложение выходит раньше Future завершает или
  • (если ваше приложение не закрывается) функция, в которой вы делаете это сбрасывает result

Если ваше приложение не закрывается, вы можете попробовать использовать result.onComplete делать необходимую работу.

Я не вижу весь ваш код, но мне кажется, что во фрагменте, который вы опубликовали, result Значение - это будущее, которое не завершается до конца выполнения вашей программы, и это потому, что код в map тоже не выполняется.

Другие вопросы по тегам