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.
Generación de subsegmentos personalizados con el X-Ray SDK para Java
nota
X-Ray SDK/Daemon Aviso de mantenimiento: el 25 de febrero de 2026, AWS X-Ray SDKs/Daemon entrará en modo de mantenimiento, en el que AWS se limitarán las versiones de X-Ray SDK y Daemon para abordar únicamente los problemas de seguridad. Para obtener más información sobre la cronología del soporte, consulte Cronología de X-Ray SDK y Daemon Support. Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte Migración de una X-Ray instrumentación a otra. OpenTelemetry
Los subsegmentos amplían el segmento de un rastro con detalles sobre el trabajo realizado para atender una solicitud. Cada vez que realiza una llamada con un cliente instrumentado, el X-Ray SDK registra la información generada en un subsegmento. Puede crear subsegmentos adicionales para agrupar otros subsegmentos, medir el rendimiento de una sección de código o registrar anotaciones y metadatos.
Para administrar los subsegmentos, utilice los métodos beginSubsegment y endSubsegment.
ejemplo GameModel.java - subsegmento personalizado
import com.amazonaws.xray.AWSXRay;
...
public void saveGame(Game game) throws SessionNotFoundException {
// wrap in subsegment
Subsegment subsegment = AWSXRay.beginSubsegment("Save Game");
try {
// check session
String sessionId = game.getSession();
if (sessionModel.loadSession(sessionId) == null ) {
throw new SessionNotFoundException(sessionId);
}
mapper.save(game);
} catch (Exception e) {
subsegment.addException(e);
throw e;
} finally {
AWSXRay.endSubsegment();
}
}En este ejemplo, el código del subsegmento carga la sesión del juego desde DynamoDB con un método del modelo de sesión y utiliza el mapeador de DynamoDB para AWS SDK para Java guardar la partida. Cuando se encapsula este código en un subsegmento, las llamadas a DynamoDB se convierten en elementos secundarios del subsegmento Save Game en la vista de rastros en la consola.
Si en el código en su subsegmentos aparecen excepciones comprobadas, envuélvalo en un bloque try y llame a AWSXRay.endSubsegment() en un bloque finally para garantizar que el subsegmento está siempre cerrado. Si un subsegmento no está cerrado, el segmento principal no se puede completar y no se enviará a. X-Ray
En los códigos donde no aparecen excepciones comprobadas, puede transferir el código a AWSXRay.CreateSubsegment como una función de Lambda.
ejemplo Función Lambda de subsegmento
import com.amazonaws.xray.AWSXRay;
AWSXRay.createSubsegment("getMovies", (subsegment) -> {
// function code
});Al crear un subsegmento dentro de un segmento u otro subsegmento, el X-Ray SDK para Java genera un ID para él y registra la hora de inicio y la hora de finalización.
ejemplo Subsegmentos con metadatos
"subsegments": [{
"id": "6f1605cd8a07cb70",
"start_time": 1.480305974194E9,
"end_time": 1.4803059742E9,
"name": "Custom subsegment for UserModel.saveUser function",
"metadata": {
"debug": {
"test": "Metadata string from UserModel.saveUser"
}
},Para la programación asíncrona y de subprocesos múltiples, debes pasar manualmente el subsegmento al endSubsegment() método para asegurarte de que se cierra correctamente, ya que el contexto puede modificarse durante la X-Ray ejecución asíncrona. Si un subsegmento asíncrono se cierra después de cerrar su segmento principal, este método transmitirá automáticamente todo el segmento al daemon. X-Ray
ejemplo Subsegmento asíncrono
@GetMapping("/api")
public ResponseEntity<?> api() {
CompletableFuture.runAsync(() -> {
Subsegment subsegment = AWSXRay.beginSubsegment("Async Work");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
subsegment.addException(e);
throw e;
} finally {
AWSXRay.endSubsegment(subsegment);
}
});
return ResponseEntity.ok().build();
}