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

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

Caso haja alguma divergência entre a versão em inglês e a traduzida, a versão em inglês prevalece. Acesse esta página para mais informações.

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.