本文へスキップ

非同期追跡

Javaエージェント設定を介して非同期アプリケーション活動を追跡する方法を案内します。 CompletableFutureメソッドの収集方法と、ユーザーアプリケーションにそのメソッドをhookingする方法が含まれます。 設定例とともにwhatap.confファイルに追加すべきオプションを提供し、非同期呼び出しの性能モニタリングを強化できるようにサポートします。

CompletableFuture

Javaエージェント設定を通じてCompletableFutureメソッドを収集する方法をご案内します。

CompletableFutureメソッドの追加

ユーザーのJavaアプリケーションプロジェクトにエージェントとしてhookingするCompletableFutureメソッドを追加します。

  • メソッド名:'trace'で統一

  • ReturnType: Supplier, Consumer, Runnable, Future

package io.home.test.util;

import java.util.concurrent.Future;
import java.util.function.Consumer;
import java.util.function.Supplier;

public class W {
public static <T> Supplier<T> trace(Supplier<T> f) {
return f;
}
public static <T> Consumer<T> trace(Consumer<T> f) {
return f;
}
public static <T> Runnable trace(Runnable f) {
return f;
}
public static <T> Future<T> trace(Future<T> f) {
return f;
}
}

エージェント設定の追加

エージェント設定のため、whatap.confファイルに次のオプションを追加します。

whatap.conf
hook_completablefuture_patterns=io.home.test.util.W.*
ノート
  • Contextがある場合は、traceメソッドを追加してトランザクションを接続します。

  • Contextがない場合は、hook_service_patternsオプションでサービスを開始する必要があります。

使用例

  • イベントソース

    public CompletableFuture<String> serviceATimeout() {
    return CompletableFuture.supplyAsync(() -> {
    RestTemplate restTemplate = new RestTemplate();
    return restTemplate.getForObject("http://localhost:8081/api/serviceB/timeout", String.class);
    });
    }
  • io.home.test.util.W.trace()適用

    // io.home.test.util.W.trace()適用
    public CompletableFuture<String> serviceATimeout() {
    return CompletableFuture.supplyAsync(W.trace(() -> {
    RestTemplate restTemplate = new RestTemplate();
    return restTemplate.getForObject("http://localhost:8081/api/serviceB/timeout", String.class);
    }));
    }