• 로그인지금 시작하기

사용자의 편의를 위해 제공되는 기계 번역입니다.

영문본과 번역본이 일치하지 않는 경우 영문본이 우선합니다. 보다 자세한 내용은 이 페이지를 방문하시기 바랍니다.

문제 신고

Scala Akka HTTP 핵심 계측

Java 에이전트 릴리스 7.8.0의 도입으로,보고되는 오류로 트랜잭션이 잘못 복제될 수 있는 시나리오를 제거하기 위해 bindAndHandle 메서드의 기본 계측을 제거 하도록 변경되었습니다.어떤 상황에서는 이 변경 사항을 보상하기 위해 명시적 메서드 호출을 수행해야 할 수도 있습니다.

배경: HttpExt 계측

Akka HTTP Core에 대한 계측은 서버의 기본 진입점 역할을 하는 akka.http.scaladsl.HttpExt 클래스에서 수행됩니다.HTTP 서버를 시작하는 데 사용할 수 있는 HttpExt 의 두 가지 편리한 방법이 계측되었습니다.

  • bindAndHandleAsync: 주어진 엔드포인트에서 새로운 HTTP 서버를 시작하고 HttpRequest 을 수신하고 Future[HttpResponse]
  • bindAndHandleSync: 주어진 엔드포인트에서 새로운 HTTP 서버를 시작하고 HttpRequest 을 수신하고 HttpResponse

보고되는 트랜잭션의 잘못된 중복을 제거하기 위해 akka.stream.scaladsl.Flow 인스턴스를 사용하여 새 HTTP 서버를 시작하는 bindAndHandle 메서드에 더 이상 계측이 적용되지 않습니다.

트랜잭션 중복은 Akka Http Routing DSL 계측의 충돌로 인해 발생합니다.

솔루션 - 명시적으로 bindAndHandleAsync 호출

akka.stream.scaladsl.Flow 에서 HTTP 서버를 시작하려면 bindAndHandleAsync 메서드를 명시적으로 호출해야 합니다.예를 들어:

...
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)
...

중요

Akka HTTP 라우팅 DSL을 사용하여 akka.http.scaladsl.Route 에서 HTTP 서버를 시작할 때 bindAndHandle 를 호출하는 유사한 해결 방법은 필요 하지 않습니다 .에이전트 계측은 다른 편리한 방법에서 호출될 때 정상적으로 작동합니다.

Copyright © 2022 New Relic Inc.

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