• EnglishEspañol日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は参考用に提供されます。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページ を参照してください。

問題を作成する

ScalaAkkaHTTPコアインストルメンテーション

Javaエージェントリリース7.8.0の導入により、bindAndHandleメソッドのデフォルトのインストルメンテーションを削除するように変更が加えられ、誤って重複したトランザクションが報告される可能性のあるシナリオが排除されました。状況によっては、この変更を補正するために明示的なメソッド呼び出しを行う必要がある場合があります。

背景:HttpExtインストルメンテーション

Akka HTTP Coreのインストルメンテーションは、サーバーのメインエントリポイントとして機能するakka.http.scaladsl.HttpExtクラスで実行されます。HTTPサーバーの起動に使用できるHttpExtの2つの便利なメソッドが装備されています。

  • bindAndHandleAsync:指定されたエンドポイントで新しいHTTPサーバーを起動し、 HttpRequestを受信して Future[HttpResponse]
  • bindAndHandleSync:指定されたエンドポイントで新しいHTTPサーバーを起動し、 HttpRequestを受信して HttpResponse

トランザクションの誤った重複が報告されないようにするために、 akka.stream.scaladsl.Flowインスタンスを使用して新しいHTTPサーバーを起動するbindAndHandleメソッドにインストルメンテーションが適用されなくなりました。

トランザクションの重複は、Akka HttpRoutingDSLインストルメンテーションの衝突によるものです。

解決策-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 Routing DSLを使用してakka.http.scaladsl.RouteからHTTPサーバーを起動するときにbindAndHandleを呼び出すという、同様の回避策は必要ありません。エージェントインストルメンテーションは、他の便利なメソッドから呼び出されたときに正常に機能します。

Copyright © 2024 New Relic株式会社。

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