我的目标是让Jersey客户端收集有关HTTP响应/执行时间的数据,我认为通过实现JAX-RS ClientRequestFilter
和ClientResponseFilter
代码,我有正确的方法在每个记录请求的开始和结束。但是,当与以下代码一起使用时:
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)一起使用。我考虑过的一个替代方案是使用a library for Apache HttpClient for this purpose,但这需要changing the default transport layer用于Jersey,这似乎是修复一个简单问题的极端修改。 (这对于RESTEasy来说稍微简单一些,因为它看起来use Apache HttpClient by default,所以对于RESTEasy,我可能已经走了那条路。)
是否可以使用Jersey设置在最后一个字节写入实体时执行的过滤器?或者,有没有更好的方法来检测泽西岛客户?