Сбои в потоковой обработке запросов - что происходит с соединением? - PullRequest
0 голосов
/ 24 января 2019

Документация для akka-http объясняет, что важно полностью использовать поток запросов, так как непереработанные байты будут интерпретироваться как противодавление (https://doc.akka.io/docs/akka-http/current/implications-of-streaming-http-entity.html). Когда вы заранее знаете, что поток можно игнорировать, вам следует используйте discardEntityBytes или прочитайте его полностью другим способом. Существует также возможность закрытия соединения путем присоединения потока к Sink.cancelled.

У меня вопрос, что происходит, когда поток не удается.

  • Поток стекает или соединение закрыто? Или реализация несет ответственность за восстановление после ошибок и за утечку или закрытие соединения? Если так, что является хорошим шаблоном кода для этого?
  • Имеет ли значение, если запрос завершен с Future или ответ потоковый?
  • Что, если вместо неожиданного сбоя вы определите на середине пути, что остальная часть потока может быть проигнорирована. Является ли создание исключения хорошим способом остановки потоковой обработки?

Пример завершения с будущим:

val route =
    post {
        extractDataBytes { data =>
            complete {
                data
                    .via(flow1)
                    .via(flow2) // say error happens here at some point
                    .runwWith(sink)
            }
        }
    }

1 Ответ

0 голосов
/ 24 января 2019

Если соединение с сервером имеет проблему, то соединение будет автоматически закрыто.

...