Как регистрировать запросы HTTP-клиентов Akka
Мне нужно регистрировать запросы клиентов http akka и их ответы. Несмотря на то, что, по-видимому, есть подсказка API для регистрации этих запросов, нет четкой документации о том, как это должно быть сделано. Мой подход состоял в том, чтобы создать зарегистрированный запрос, который прозрачно переноситHttp().singleRequest(req)
следующее:
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
}
}
К сожалению, я должен понять будущее либо с помощью демаршала, либо просто запросивresp.entity.dataBytes
для того, чтобы восстановить тело ответа. Я получаю запись, но обещание выполнено, и я больше не могу разархивировать сущность до фактических данных. Рабочее решение будет регистрировать запрос и ответ и проходить этот тестовый пример безIllegalStateException
с "обещанием уже выполненным"
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
}
}
Идеи приветствуются.