es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La aplicación Springboot arroja una excepción cuando el demonio de AWS X-ray no está en funcionamiento.

Estoy trabajando en la integración de Springboot y AWS X-Ray, como parte de esto, hemos empujado nuestro código y desplegado la aplicación Springboot y el demonio de X-Ray como un contenedor “sidecar” en la tarea ESC Fargate en el entorno de producción y todo funciona bien. Sin embargo, no necesitamos soporte de X-Ray para entornos más bajos como QA y STAGE, por lo que no estamos desplegando el demonio de X-Ray; debido a esto, el código existente no puede conectar con el demonio de X-Ray y arroja la siguiente excepción:

04:54:12.364 [pool-2-thread-1] ERROR com.amazonaws.xray.strategy.sampling.pollers.RulePoller – Se ha producido un error al sondear GetSamplingRules:
com.amazonaws.xray.internal.XrayClientException: No se pudo serializar y enviar la solicitud.
en com.amazonaws.xray.internal.UnsignedXrayClient.sendRequest (UnsignedXrayClient.java: 142) ~ [core-commons-qa2-1.0.0.jar! /: ?]
en com.amazonaws.xray.internal.UnsignedXrayClient.getSamplingRules (UnsignedXrayClient.java: 112) ~ [core-commons-qa2-1.0.0.jar! /: ?]
en com.amazonaws.xray.strategy.sampling.pollers.RulePoller.pollRule (RulePoller.java: 100) ~ [core-commons-qa2-1.0.0.jar! /: ?]
en com.amazonaws.xray.strategy.sampling.pollers.RulePoller.lambda $ start $ 0 (RulePoller.java: 72) ~ [core-commons-qa2-1.0.0.jar! /: ?]
en java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java: 515) [?:?]
en java.util.concurrent.FutureTask.runAndReset (FutureTask.java: 305) [?:?]
en java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java: 305) [?:?]
en java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java: 1128) [?:?]
en java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java: 628) [?:?]
en java.lang.Thread.run (Thread.java: 829) [?:?]
Causado por: java.net.ConnectException: conexión rechazada (conexión rechazada)
en java.net.PlainSocketImpl.socketConnect (Nativo Método) ~ [?:?]
en java.net.AbstractPlainSocketImpl.doConnect (AbstractPlainSocketImpl.java: 399) ~ [?:?]
en java.net.AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl.java: 242) ~ [?:?]
en java.net.AbstractPlainSocketImpl.connect (AbstractPlainSocketImpl.java: 224) ~ [?:?]
en java.net.Socket.connect (Socket.java: 609) ~ [?:?]

¿Cómo manejamos este tipo de escenario donde podemos ejecutar con éxito la misma base de código en entornos más bajos sin eliminar el código X-Ray SDK? ¿Existe alguna configuración para comprobar e instrumentar solo si se está ejecutando el demonio de X-Ray? Por favor, ilumínenos sobre ello.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una forma de manejar este escenario es habilitar condicionalmente el código de X-Ray SDK basado en el entorno. En la aplicación de Spring Boot, esto se puede lograr utilizando perfiles.

    Primero, cree un perfil para el entorno de producción que incluya la configuración de X-Ray SDK. En el archivo application.properties para el perfil de producción, agregue las siguientes propiedades:

    # AWS X-Ray Configuration
    aws.xray.strategy.sampling.ruleManifest: file:/path/to/xray/sampling-rules.json
    

    Luego, en el código de la aplicación, anote las clases y métodos que desea instrumentar con @XRayEnabled. Por ejemplo:

    @RestController
    @XRayEnabled
    public class MyController {
    
      @GetMapping("/hello")
      public String hello() {
        return "¡Hola Mundo!";
      }
    }
    

    A continuación, cree un perfil qa y stage que excluya la configuración de X-Ray SDK. En los archivos application-qa.properties y application-stage.properties, agregue las siguientes propiedades:

    # Disable AWS X-Ray
    aws.xray.contextMissingStrategy: LOG_ERROR
    aws.xray.enableDefaultPlugins: false
    

    Tenga en cuenta que aws.xray.contextMissingStrategy está configurado en LOG_ERROR, lo que significa que si X-Ray no está disponible, la aplicación registrará un mensaje de error y continuará.

    Finalmente, al implementar la aplicación en el entorno qa o stage, active el perfil utilizando la opción de línea de comandos -Dspring.profiles.active:

    java -jar myapp.jar -Dspring.profiles.active = qa
    

    De esta manera, el código de X-Ray SDK solo se habilitará cuando se ejecute en producción con el perfil correspondiente activado. En los entornos inferiores, el código se ejecutará sin X-Ray SDK sin que se produzcan excepciones.

Comments are closed.