• EnglishEspañol日本語한국어Português
  • EntrarComeçar agora

Esta tradução de máquina é fornecida para sua comodidade.

In the event of any inconsistency between the English version and the translated version, the English versionwill take priority. Please visit this page for more information.

Criar um problema

Instrumentação principal HTTP Scala Akka

Com a introdução do agente Java versão 7.8.0, foram feitas alterações em remove a instrumentação padrão do método bindAndHandle , para eliminar cenários que poderiam resultar no relato de transações duplicadas erroneamente. Em algumas situações, pode ser necessário fazer chamadas de método explícitas para compensar essa alteração.

Antecedentes: instrumentação HttpExt

A instrumentação para Akka HTTP Core é realizada na classe akka.http.scaladsl.HttpExt que serve como ponto de entrada principal para um servidor. Dois métodos convenientes de HttpExt que podem ser usados para iniciar um servidor HTTP foram instrumentados:

  • bindAndHandleAsync: um método de conveniência que inicia um novo servidor HTTP em um determinado endpoint e usa um manipulador que é uma função que recebe um HttpRequest e retorna um Future[HttpResponse]
  • bindAndHandleSync: um método de conveniência que inicia um novo servidor HTTP em um determinado endpoint e usa um manipulador que é uma função que recebe um HttpRequest e retorna um HttpResponse

Para evitar que a duplicação errônea de transação seja reportada, está sendo aplicada instrumentação no longer ao método bindAndHandle , que inicia um novo servidor HTTP usando uma instância akka.stream.scaladsl.Flow .

A duplicação da transação se deve a um conflito na instrumentação DSL do Akka Http Routing.

Solução - chame explicitamente bindAndHandleAsync

Se desejar iniciar um servidor HTTP a partir de um akka.stream.scaladsl.Flow, você deverá invocar explicitamente o método bindAndHandleAsync . Por exemplo:

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

Uma solução alternativa semelhante, chamar bindAndHandle ao iniciar um servidor HTTP a partir de um akka.http.scaladsl.Route usando o Akka HTTP Routing DSL, não é necessária. a instrumentação de agente funcionará normalmente quando for chamada de outros métodos de conveniência.

Copyright © 2024 New Relic Inc.

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