Акка Раковина никогда не закрывается - PullRequest
0 голосов
/ 26 октября 2018

Я загружаю один файл на 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)

Но это в конечном итоге никогда не покидает шаг карты.Я пытался добавить выключатель, но это, похоже, не дало эффекта (ни с выключением, ни с прерыванием):

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 голосов
/ 26 октября 2018

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

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

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

0 голосов
/ 26 октября 2018

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

...