Akka Http: Exceeded configured max

I post some data to Server using the following code

  def post(endpoint: String, entity: Strict) = {
    Http().singleRequest(HttpRequest(uri = Notifier.notificationUrl + endpoint, method = HttpMethods.POST,
      entity = entity)) onComplete {
      case Success(response) => response match {
        case HttpResponse(StatusCodes.OK, _, _, _) =>
          log.info("communicated successfully with Server")
      }
      case Failure(response) =>
        log.error("communicated failed with Server: {}", response)
    }
  }

This is called every 10 seconds when Notifier actor receives message as following

case ecMonitorInformation: ECMonitorInformation =>
  post("monitor", httpEntityFromJson(ecMonitorInformation.toJson))

Problem?

I see that Initially (around 5 requests going to server) but then it hungs up, I do not see any logging, server does not receive any data. After a while on the client side, I see following

ERROR c.s.e.notification.Notifier - communicated failed with Server: java.lang.RuntimeException: Exceeded configured max-open-requests value of [32]

What is going on? How do I fix this issue?


I went through the docs and tried the following

val connectionFlow: Flow[HttpRequest, HttpResponse, 
        Future[Http.OutgoingConnection]] =
        Http().outgoingConnection(host = "localhost", port = 8080)

and then

  def httpPost(uri: String, httpEntity:Strict) {
    val responseFuture: Future[HttpResponse] =
      Source.single(HttpRequest(uri = "/monitor", method = HttpMethods.POST, entity=httpEntity))
        .via(connectionFlow)
        .runWith(Sink.head)

    responseFuture onComplete {
      case Success(response) => log.info("Communicated with Server: {}", response)
      case Failure(failure) => log.error("Communication failed with Server: {}", failure)
    }

and this worked for me


If you are going to be repeatedly calling your method, you might want to consider using one of the connection pool based client methods as described here: http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala/http/client-side/index.html

You can also set the connection pool settings in the akka-http client configuration: http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala/http/configuration.html#akka-http-core

Search for host-connection-pool.


You could use Source.queue instead of Source.single to provide buffering and overflow strategy. See more details at https://stackoverflow.com/a/35115314/1699837

链接地址: http://www.djcxy.com/p/28598.html

上一篇: ExtJS:使用远程加载的单例值来存储定义

下一篇: Akka Http:超过配置的最大值