Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Transmisión de contexto de segmento entre subprocesos en una aplicación multiproceso
nota
End-of-support aviso: el 25 de febrero de 2027, AWS X-Ray dejará de ofrecer soporte para AWS X-Ray SDKs and daemon. A partir del 25 de febrero de 2027, dejaréis de recibir actualizaciones ni versiones. Para obtener más información sobre el cronograma de soporte, consulteCronología del fin del soporte de X-Ray SDK y daemon. Se recomienda migrar a OpenTelemetry. Para obtener más información sobre la migración a OpenTelemetry, consulte Migración de una instrumentación de rayos X a una instrumentación. OpenTelemetry
Cuando se crea un nuevo subproceso en la aplicación, el AWSXRayRecorder
no mantiene una referencia al segmento o subsegmento Entity actual. Si utilizas un cliente instrumentado en el nuevo hilo, el SDK intenta escribir en un segmento que no existe, lo que provoca un. SegmentNotFoundException
Para evitar que se produzcan excepciones durante el desarrollo, puedes configurar la grabadora con una ContextMissingStrategyque le indique que registre un error en su lugar. Puede configurar la estrategia en código o configurar opciones equivalentes con una variable de entorno o una propiedad del sistema. SetContextMissingStrategy
Una forma de abordar el error consiste en utilizar un segmento nuevo llamando a beginSegment al iniciar el subproceso y a endSegment al cerrarlo. Esto funciona si está instrumentando código que no se ejecuta en respuesta a una solicitud HTTP, como código que se ejecuta cuando se inicia la aplicación.
Si utiliza varios subprocesos para gestionar las solicitudes entrantes, puede transferir el segmento o subsegmento actual al nuevo subproceso y facilitarlo a la grabadora global. De este modo, se garantiza que la información registrada en el nuevo subproceso esté asociada al mismo segmento que el resto de la información registrada sobre dicha solicitud. Una vez que el segmento esté disponible en el nuevo hilo, puede ejecutar cualquier ejecutable con acceso al contexto de ese segmento mediante el método segment.run(() -> { ... })
.
Consulte Uso de clientes instrumentados en subprocesos de trabajo para ver un ejemplo.
Uso de X-Ray con programación asíncrona
El SDK de X-Ray para Java se puede utilizar en programas Java asíncronos con. SegmentContextExecutors SegmentContextExecutor Implementa la interfaz Executor, lo que significa que se puede transferir a todas las operaciones asíncronas de un. CompletableFuture
ejemplo Ejemplo: App.java: Pasando a SegmentContextExecutor CompletableFuture
DynamoDbAsyncClient client = DynamoDbAsyncClient.create();
AWSXRay.beginSegment();
// ...
client.getItem(request).thenComposeAsync(response -> {
// If we did not provide the segment context executor, this request would not be traced correctly.
return client.getItem(request2);
}, SegmentContextExecutors.newSegmentContextExecutor());