• EnglishEspañol日本語한국어Português
  • Inicia sesiónComenzar ahora

Te ofrecemos esta traducción automática para facilitar la lectura.

En caso de que haya discrepancias entre la versión en inglés y la versión traducida, se entiende que prevalece la versión en inglés. Visita esta página para obtener más información.

Crea una propuesta

Instrumentación central HTTP de Scala Akka

Con la introducción del agente de Java versión 7.8.0, Se realizaron cambios en remove la instrumentación predeterminada del método bindAndHandle , para eliminar escenarios que podrían resultar en que se reporten transacciones duplicadas erróneamente. En algunas situaciones, puede que sea necesario realizar llamadas explícitas a métodos para compensar este cambio.

Antecedentes: instrumentación HttpExt

La instrumentación para Akka HTTP Core se lleva a cabo en la clase akka.http.scaladsl.HttpExt que sirve como punto de entrada principal para un servidor. Se han instrumentado dos métodos convenientes de HttpExt que se pueden utilizar para iniciar un servidor HTTP:

  • bindAndHandleAsync: Un método conveniente que inicia un nuevo servidor HTTP en el extremo dado y utiliza un controlador que es una función que recibe un HttpRequest y devuelve un Future[HttpResponse]
  • bindAndHandleSync: Un método conveniente que inicia un nuevo servidor HTTP en el extremo dado y utiliza un controlador que es una función que recibe un HttpRequest y devuelve un HttpResponse

Para evitar que se informe la duplicación errónea de transacciones, se está aplicando instrumentación no longer al método bindAndHandle , que inicia un nuevo servidor HTTP utilizando una instancia akka.stream.scaladsl.Flow .

La duplicación de la transacción se debe a un choque en la instrumentación DSL de Akka Http Routing.

Solución: llamar explícitamente a bindAndHandleAsync

Si desea iniciar un servidor HTTP desde un akka.stream.scaladsl.Flow, debe invocar explícitamente el método bindAndHandleAsync . Por ejemplo:

val flow: Flow[HttpRequest, HttpResponse, NotUsed] = ???
val asyncHandler: HttpRequest => Future[HttpResponse] = request => Source.single(request).via(flow).runWith(Sink.head)
Http().bindAndHandleAsync(asyncHandler, host, port)

Importante

No es necesaria una solución alternativa similar, llamar bindAndHandle al iniciar un servidor HTTP desde un akka.http.scaladsl.Route utilizando el DSL de enrutamiento HTTP de Akka. La instrumentación del agente funcionará normalmente cuando se llame desde otros métodos convenientes.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.