¿Cómo se registran las solicitudes de un cliente HTTP de Akka?
Necesito registrar las solicitudes de clientes http akka, así como sus respuestas. Si bien parece haber un indicio de API para registrar estas solicitudes, no existe una documentación clara sobre cómo debe hacerse. Mi enfoque ha sido crear una solicitud registrada que se envuelva de forma transparenteHttp().singleRequest(req)
como sigue:
def loggedRequest(req: HttpRequest)
(implicit system: ActorSystem, ctx: ExecutionContext, m: Materializer): Future[HttpResponse] = {
Http().singleRequest(req).map { resp ⇒
Unmarshal(resp.entity).to[String].foreach{s ⇒
system.log.info(req.toString)
system.log.info(resp.toString + "\n" + s)
}
resp
}
}
Desafortunadamente, tengo que agarrar el futuro ya sea a través de unmarshal o simplemente solicitandoresp.entity.dataBytes
para recuperar el cuerpo de la respuesta. Recibo el registro, pero la promesa se completa y ya no puedo desviar la entidad a los datos reales. Una solución de trabajo registraría la solicitud y la respuesta y pasaría este caso de prueba sin unIllegalStateException
con "Promesa ya completada" lanzada:
describe("Logged rest requests") {
it("deliver typed responses") {
val foo = Rest.loggedRequest(Get(s"http://127.0.0.1:9000/some/path"))
val resp = foo.futureValue(patience)
resp.status shouldBe StatusCodes.OK
val res = Unmarshal(resp.entity).to[MyClass].futureValue
}
}
Ideas bienvenidas.