

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Membuat subsegmen kustom dengan X-Ray SDK for Java
<a name="xray-sdk-java-subsegments"></a>

**catatan**  
Pemberitahuan SDK/Daemon Pemeliharaan X-Ray - Pada 25 Februari 2026, AWS SDKs/Daemon X-Ray akan memasuki mode pemeliharaan, di mana AWS akan membatasi rilis X-Ray SDK dan Daemon untuk mengatasi masalah keamanan saja. Untuk informasi selengkapnya tentang garis waktu dukungan, lihat[Garis waktu Dukungan X-Ray SDK dan Daemon](xray-sdk-daemon-timeline.md). Kami merekomendasikan untuk bermigrasi ke OpenTelemetry. Untuk informasi lebih lanjut tentang migrasi ke OpenTelemetry, lihat [Migrasi dari instrumentasi X-Ray ke instrumentasi](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

Subsegmen memperluas [segmen](xray-concepts.md#xray-concepts-segments) pelacakan dengan detail tentang pekerjaan yang dilakukan untuk melayani permintaan. Setiap kali Anda melakukan panggilan dengan klien berinstrumen, X-Ray tersebut mencatat informasi yang dihasilkan dalam subsegmen. Anda dapat membuat subsegment tambahan untuk mengelompokkan subsegment lain, untuk mengukur performa bagian kode, atau untuk mencatat anotasi dan metadata.

Untuk mengelola subsegment, gunakan metode `beginSubsegment` dan `endSubsegment`.

**Example GameModel.java - subsegmen khusus**  

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

Dalam contoh ini, kode dalam subsegmen memuat sesi game dari DynamoDB dengan metode pada model sesi, dan menggunakan AWS SDK untuk Java pemetaan DynamoDB untuk menyimpan game. Membungkus kode ini di subsegmen membuat panggilan DynamoDB anak subsegmen `Save Game` dalam tampilan penelusuran di konsol tersebut.

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


Jika kode di subsegmen Anda melempar pengecualian yang diperiksa, bungkus dalam blok `try` dan panggilan `AWSXRay.endSubsegment()` dalam blok `finally` untuk memastikan bahwa subsegmen selalu tertutup. Jika subsegmen tidak ditutup, segmen induk tidak dapat diselesaikan dan tidak akan dikirim ke X-Ray.

Untuk kode yang tidak membuang pengecualian yang diperiksa, Anda dapat melewati kode untuk `AWSXRay.CreateSubsegment` sebagai fungsi Lambda.

**Example Subsegmen fungsi Lambda**  

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

Ketika Anda membuat subsegmen dalam segmen atau subsegmen lain, X-Ray SDK for Java membuat ID untuknya dan mencatat waktu mulai dan waktu akhir.

**Example Subsegmen dengan metadata**  

```
"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"
    }
  },
```

Untuk pemrograman asinkron dan multi-threaded, Anda harus secara manual melewati subsegment ke metode `endSubsegment()` untuk memastikan ditutup dengan benar karena konteks X-Ray dapat diubah selama eksekusi asinkron. Jika subsegmen asinkron ditutup setelah segmen induknya ditutup, metode ini akan secara otomatis mengalirkan seluruh segmen ke daemon X-Ray.

**Example Subsegmen Asinkron**  

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