4

私の目標は、HTTP 応答/実行時間に関するデータを収集するように Jersey クライアントをインストルメント化することです。リクエストの開始と終了を記録するために、JAX-RSClientRequestFilterClientResponseFilterwith コードをそれぞれに実装するという正しいアプローチがあると考えていました。ただし、次のようなコードで使用する場合:

InputStream is = client.target("https://mytarget")
  .request(MediaType.APPLICATION_OCTET_STREAM).get(InputStream.class));
// Actually consume the stream, which seems to block waiting for data
final byte[] bytes = IOUtils.toByteArray(is);

... ヘッダーのダウンロードにかかる時間と思われるものだけを測定することになり、入力ストリームをバイト配列に変換するときに発生すると思われるエンティティ全体をダウンロードするのにかかる時間を測定しないため、重大な問題が発生します(ほんの一例です。私の場合、エンティティの内容が利用可能になったときにそれを読んでいます)。

私のユースケースは、分散トレーサー ( AWS X-Ray ) で使用できるように計測することです。私が考えていた別の方法は、この目的のために Apache HttpClient のライブラリを使用することでしたが、それには、Jerseyのデフォルトのトランスポート層を変更する必要があり、単純な問題を修正するための極端な変更のように思えました。(RESTEasyではデフォルトで Apache HttpClientを使用しているように見えるため、RESTEasy ではもう少し簡単です。RESTEasy では、そのルートに行った可能性があります。)

最後のバイトがエンティティに書き込まれたときに実行されるフィルターをジャージーで設定することは可能ですか? または、Jersey クライアントをインストルメント化するためのより良い方法はありますか?

4

0 に答える 0