Как решить проблемы с akka-http? - PullRequest
1 голос
/ 20 июня 2019

Я новичок в Akka-Http. Я добавил следующий маршрут

path(urlpath / "messages") {
    post {
        decodeRequest {
            withoutSizeLimit {
                entity(asSourceOf[Message]) { source =>
                    val storeToDb = Flow[Message].map[Future[Message]](message => (service ask message).mapTo[Message])
                    val sendToProviderFlow = Flow[Future[Message]].map[Unit](message => sendToJasminProvider(message))
                    val futureResponse = source
                                            .via(storeToDb)
                                            .via(sendToProviderFlow)
                                            .runWith(Sink.ignore).map(_ => "Message Received")

                    complete(futureResponse)
                }
            }
        }
    }
}

Когда я попытался запустить выше Route, я получил пару ошибок, и я не знаю, как их исправить.

Вопросы:

  • Ошибка подтверждения: не удалось принять новое соединение. Java.io.IOException: Слишком много открытых файлов
  • [1] встречены мертвые буквы. Если это не ожидаемое поведение, это ведение журнала можно отключить или отрегулировать с помощью параметров конфигурации «akka.log-dead-letters» и «akka.log-dead-letters-while-shutdown».
  • akka.http.scaladsl.model.EntityStreamException: поток сущностей усечение

1 Ответ

0 голосов

По поводу первой ошибки, кажется, вы открываете слишком много соединений. Может быть, вы просто не закрыли их где-то. Unix использовал аналогичное соединение для сокетов и файлов

По поводу второй ошибки, очевидно, что ваш актер (служба) мертв. Попробуйте отладить жизненный цикл ваших актеров и начните с

enabling akka.actor.debug.lifecycle = on

Для более подробной информации посетите эту страницу https://doc.akka.io/docs/akka/current/logging.html#auxiliary-logging-options

имеет ли sendToJasminProvider тип Future[Message] => Unit? Если эта функция имеет тип, такой как Future[Message] => Future[T], то это проблема

...