• /
  • EnglishEspañolFrançais日本語한국어Português
  • Se connecterDémarrer

Cette traduction automatique est fournie pour votre commodité.

En cas d'incohérence entre la version anglaise et la version traduite, la version anglaise prévaudra. Veuillez visiter cette page pour plus d'informations.

Créer un problème

Scala Akka de base HTTP instrumentation

Avec l'introduction de agent Java sortie 7.8.0, des modifications ont été apportées à remove l'instrumentation par défaut de la méthode bindAndHandle , afin d'éliminer les scénarios qui pourraient entraîner la déclaration de transactions dupliquées par erreur. Dans certaines situations, il peut être nécessaire d'effectuer des appels de méthode explicites pour compenser ce changement.

Contexte : instrumentationHttpExt

L'instrumentation pour Akka HTTP Core est réalisée dans la classe akka.http.scaladsl.HttpExt qui sert de point d'entrée principal pour un serveur. Deux méthodes pratiques de HttpExt qui peuvent être utilisées pour démarrer un serveur HTTP ont été instrumentées :

  • bindAndHandleAsync: Une méthode pratique qui démarre un nouveau serveur HTTP au point de terminaison donné et utilise un gestionnaire qui est une fonction recevant un HttpRequest et renvoyant un Future[HttpResponse]
  • bindAndHandleSync: Une méthode pratique qui démarre un nouveau serveur HTTP au point de terminaison donné et utilise un gestionnaire qui est une fonction recevant un HttpRequest et renvoyant un HttpResponse

Pour éliminer la duplication erronée des transactions signalées, l'instrumentation est no longer appliquée à la méthode bindAndHandle , qui démarre un nouveau serveur HTTP à l'aide d'une instance akka.stream.scaladsl.Flow .

La duplication des transactions est due à un conflit dans l'instrumentation DSL Akka Http Routing.

Solution - appeler explicitement bindAndHandleAsync

Si vous souhaitez démarrer un serveur HTTP à partir d'un akka.stream.scaladsl.Flow, vous devez appeler explicitement la méthode bindAndHandleAsync . Par exemple:

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)

Important

Une solution de contournement similaire, appelant bindAndHandle lors du démarrage d'un serveur HTTP à partir d'un akka.http.scaladsl.Route à l'aide du DSL de routage HTTP Akka, n'est pas nécessaire. instrumentation de l'agent fonctionnera normalement lorsqu'elle sera appelée à partir d'autres méthodes pratiques.

Droits d'auteur © 2025 New Relic Inc.

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