如何衡量我的应用程序的HttpClients带宽使用情况?(HttpComponents 4.3)
我有一个使用HttpClient与服务器通信的客户端应用程序。所有请求均使用池http连接管理器通过同一客户端完成。不幸的是,大多数请求都直接使用httpclient(不是全部),因此可以在请求位置测量带宽是可行的,但是很麻烦。
在客户端的构造函数或连接管理器中是否可以放置我自己的带宽监视器(或者该监视器已经内置在我未发现的地方)中?
我可以这样做吗?
HttpClientBuilder.create().addInterceptorLast(new HttpResponseInterceptor()
{
@Override
public void process(HttpResponse response, HttpContext context) throws HttpException, IOException
{
}
}).build();
自定义HttpRequestExecutor
应该是最方便的拦截点
这是一个非常粗糙的解决方案,但我希望足以让您入门。
final AtomicLong totalBytes = new AtomicLong();
HttpRequestExecutor requestExecutor = new HttpRequestExecutor() {
@Override
protected HttpResponse doSendRequest(
final HttpRequest request,
final HttpClientConnection conn,
final HttpContext context) throws IOException, HttpException {
HttpResponse response = super.doSendRequest(request, conn, context);
HttpConnectionMetrics metrics = conn.getMetrics();
totalBytes.addAndGet(metrics.getSentBytesCount());
metrics.reset();
return response;
}
@Override
protected HttpResponse doReceiveResponse(
final HttpRequest request,
final HttpClientConnection conn,
final HttpContext context) throws HttpException, IOException {
HttpResponse response = super.doReceiveResponse(request, conn, context);
HttpConnectionMetrics metrics = conn.getMetrics();
totalBytes.addAndGet(metrics.getReceivedBytesCount());
metrics.reset();
return response;
}
};
CloseableHttpClient httpclient = HttpClients
.custom()
.setRequestExecutor(requestExecutor)
.build();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句