

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 SDK de X-Ray para Java
<a name="xray-sdk-java-subsegments"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el AWS X-Ray SDKs/Daemon entrará en modo de mantenimiento, donde 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](xray-sdk-daemon-timeline.md). Recomendamos 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](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

Los subsegmentos amplían el [segmento](xray-concepts.md#xray-concepts-segments) de un rastro con detalles sobre el trabajo realizado para atender una solicitud. Cada vez que usted realiza una llamada con un cliente instrumentado, el SDK de X-Ray 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`.

**Example GameModel.java: subsegmento personalizado**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
...
  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.

![\[Timeline showing Scorekeep and DynamoDB operations with durations and status checks.\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-PUTrules-timeline-subsegments.png)


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 primario no se puede completar y no se envía 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.

**Example Función Lambda de subsegmento**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);

AWSXRay.createSubsegment("getMovies", (subsegment) -> {
    // function code
});
```

Cuando crea un subsegmento dentro de un segmento o de otro subsegmento, el SDK de X-Ray para Java genera un ID para dicho subsegmento y registra la hora de inicio y la hora de finalización.

**Example 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 multiproceso, debe pasar manualmente el subsegmento al método `endSubsegment()` para asegurarse de que se cierra correctamente, ya que el contexto de X-Ray puede modificarse durante la 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 de X-Ray.

**Example 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();
}
```