全部产品
Search
文档中心

Application Real-Time Monitoring Service:Gunakan OpenTelemetry SDK untuk Java untuk secara asinkron melewatkan konteks spesifik proses

更新时间:Jul 06, 2025

Setelah mengintegrasikan layanan sub-Pemantauan Aplikasi dari Application Real-Time Monitoring Service (ARMS) untuk memantau aplikasi berbasis kerangka kerja Java umum, agen ARMS secara otomatis menginstrumentasi kerangka kerja tersebut. Dengan demikian, jejak dikumpulkan tanpa perlu modifikasi kode. Namun, jika Anda ingin secara asinkron melewatkan konteks spesifik proses, Anda dapat menggunakan OpenTelemetry SDK untuk Java.

Untuk informasi lebih lanjut tentang komponen dan kerangka kerja yang didukung oleh agen ARMS, lihat Komponen dan Kerangka Kerja Java yang Didukung oleh ARMS.

Skenario

Jika aplikasi Anda menggunakan salah satu metode pemrograman asinkron berikut, agen ARMS secara otomatis melewatkan konteks jejak secara asinkron tanpa memerlukan modifikasi kode:

  • Mengirim tugas asinkron menggunakan thread pool JDK, Spring, atau Netty.

  • Pemrograman dengan kerangka kerja React atau RxJava.

  • Menggunakan anotasi Spring @Async.

  • Pemrograman dengan kerangka kerja seperti Spring Webflux atau Spring Gateway.

Namun, dalam skenario pemrosesan asinkron berikut, Anda harus secara manual melewatkan konteks menggunakan OpenTelemetry SDK untuk Java:

  • Skenario produsen-konsumen

    Jika thread T1 menempatkan pesan di antrian dan thread T2 mengambilnya untuk diproses, thread T2 harus menggunakan kembali konteks jejak dari thread T1.

  • Pemrosesan batch database

    Jika proses P1 menulis sekelompok data ke database dan proses P2 membaca serta memproses data tersebut, proses P2 harus menggunakan kembali konteks jejak dari proses P1.

Prasyarat

  • Pemantauan Aplikasi ARMS telah diintegrasikan. Untuk informasi lebih lanjut, lihat Ikhtisar Pemantauan Aplikasi.

  • Agen ARMS adalah versi 4.x atau lebih baru. Untuk informasi tentang cara memperbarui agen ARMS, lihat Perbarui Agen ARMS.

Tambahkan dependensi

Tambahkan dependensi Maven berikut untuk memperkenalkan OpenTelemetry SDK untuk Java. Untuk informasi lebih lanjut, lihat Instrumentasi.

<dependencies>
    <dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-api</artifactId>
    </dependency>
    <dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-sdk-trace</artifactId>
    </dependency>
    <dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-sdk</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-bom</artifactId>
      <version>1.23.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Secara asinkron lewatkan konteks

Kode contoh berikut menunjukkan skenario produsen-konsumen. Saat memproduksi acara, produsen mencatat konteks jejak dari thread-nya. Saat mengonsumsi acara, ia mengambil dan memulihkan konteks tersebut.

class Event {
    private Context context;
    private String msg;

    public Event(Context context, String msg) {
        this.context = context;
        this.msg = msg;
    }
}

private final LinkedBlockingQueue<Event> linkedBlockingQueue = new LinkedBlockingQueue<Event>();

public void produce(String msg) {
    linkedBlockingQueue.add(new Event(Context.current(), msg));
}

public void consume() throws Exception {
    Event event = linkedBlockingQueue.take();
    try(Scope scope = event.context.makeCurrent()) {
        processEvent(event);
    }
}

public void processEvent(Event event) {
    //todo proses acara
}

Langkah terkait

Anda dapat mengaitkan ID jejak dengan log aplikasi untuk segera menemukan, menganalisis, dan menyelesaikan kesalahan. Untuk informasi lebih lanjut, lihat Kaitkan ID Jejak dengan Log untuk Aplikasi Java.