hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike Boyers <mboy...@yahoo.com>
Subject Instrumenting HttpClient 4
Date Tue, 17 Aug 2010 19:18:40 GMT
I've been a user of HttpClient 3 for several years and am now migrating to using HttpClient
4.

With version 3, I wrapped (extended) the client in order to instrument it (via JMX).  I kept
track of the following pieces of information, per host:
-Number of request (socket) timeouts
-Number of connection timeouts
-Number of timeouts while waiting for connection from pool
-Total number of requests
-Average Request duration
-Maximum Request duration
-Number of connections currently in pool
-Max connections in pool

With HttpClient version 4, I'd rather not extend the client and would instead like have developers
use a pre-configured httpclient that was created with a ThreadSafeClientConnManager.

I can see how to use a HttpRequestInterceptor and HttpResponseInterceptor
to record things like number of transactions, request durations, etc.

What I need help with is determining how I can record timeout information.  When I'd recorded
this in the past, I caught exceptions thrown by HttpClient's execute method in my extended
class.  It looks like when I call execute on HttpClient 4, if an exception is thrown, the
HttpResponseInterceptor will not be called.  I'm not sure where to intercept in this case.

Another related question: I typically have a scheduled task that occasionally calls the connection
manager's closeIdleConnections method.  After I do this, when I want to learn how many connections
are in each pool, I have to have kept track of each HttpRoute and then call the getConnectionsInPool(route)
method for each route.  Is there a way I can have the connection manager give me the list
of routes so I don't have to keep track of them myself?

And one final question: I'd like to consider the possibility of handing out an HttpClient
that will not talk to any host unless it has been explicitly configured (to force developers
to think about the proper max pool size so we fail fast when a remote source is having issues).
 What I'm thinking is something like:
 ConnPerRouteBean connPerRoute = new ConnPerRouteBean(0);

 // Then explicitly enable hosts as follows
 HttpHost localhost = new HttpHost("localhost", 8080);
 localhostRoute = new HttpRoute(localhost);
 connPerRoute.setMaxForRoute(localhostRoute, 10);
 ConnManagerParams.setMaxConnectionsPerRoute(params, connPerRoute);

But I currently get an exception when instantiating ConnPerRouteBean with 0 (needs to be a
positive integer).  Is there a different way to accomplish this other than the path I've outlined
above?

Thanks - I realize this was long.

Mike


      

---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Mime
View raw message