Akka http, GET Http (). SingleRequest неожиданно выбрасывает закрытое соединение с сервером. - PullRequest
0 голосов
/ 30 ноября 2018

Akka-http версия - 10.0.14

Akka версия - 2.4.20

Ошибка ниже при использовании akka http в качестве клиента для отправки запроса GET и получения ответаbody.

Исключение в потоке "main" akka.http.impl.engine.client.OutgoingConnectionBlueprint $ UnexpectedConnectionClosureException: http-сервер неожиданно закрыл соединение, прежде чем выдать ответы на 1 невыполненный запрос

Наблюдение:

  1. Тот же самый вызов GET работает через команду curl

  2. Тот же код клиента работает для вызова GET, 'https://api.xforce.ibmcloud.com/hub/invalidcall'

Код -

import akka.actor._
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
import akka.http.scaladsl.unmarshalling.Unmarshal
import akka.stream.ActorMaterializer
import akka.util.Timeout
import scala.concurrent.{Await, Future}
import scala.concurrent.duration._

object Client {

  implicit val timeout: Timeout = Timeout(10.seconds)

  def main(args: Array[String]): Unit = {

    implicit val system = ActorSystem()
    implicit val materializer = ActorMaterializer()
    implicit val executionContext = system.dispatcher

    val responseFuture: Future[HttpResponse] =
      Http().singleRequest(
        HttpRequest(
          uri = "http://localhost:9090/xstreams/v1/offset/getOffset?appId=local-1543580292487&sourceName=mysql",
          //uri="https://api.xforce.ibmcloud.com/hub/invalidcall",
          method = HttpMethods.GET
        )
      )

    val entity = Await.result(responseFuture, timeout.duration).entity
    val responseStringF = Unmarshal(entity).to[String]
    val responseString = Await.result(responseStringF, timeout.duration)

    println("\nResult = " + responseString)

    system.terminate()
  }
}
...