4

我的目标是检测 Jersey 客户端以收集有关 HTTP 响应/执行时间的数据,并且我认为我有正确的方法,通过实现 JAX-RSClientRequestFilterClientResponseFilter每个代码来记录请求的开始和结束。但是,当与如下代码一起使用时:

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 我可能会走这条路。)

Jersey 是否可以设置一个在将最后一个字节写入实体时执行的过滤器?还是有更好的方法来检测泽西岛的客户?

4

0 回答 0