scalaakkasprayakka-http

Akka Http: Exceeded configured max-open-requests value of [32]


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?


Solution

  • 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