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
下一篇: Akka Http:超过配置的最大值