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

この機械翻訳は、参考として提供されています。

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

問題を作成する

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

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

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

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

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

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

トランザクションの重複は、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.