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
를 호출하는 유사한 해결 방법은 필요 하지 않습니다 .에이전트 계측은 다른 편리한 방법에서 호출될 때 정상적으로 작동합니다.