Thanks oleg, Do you see any issues in the approach that i was thinking about (and have implemented already) other than the fact that its not very clean? Could you elaborate a bit more on what you mean by creating service on top of httpclient, (i understand what it'll do but just didn't know what/how should i register that with httpclient)?
On Tue, Mar 25, 2008 at 1:10 PM, Oleg Kalnichevski <[EMAIL PROTECTED]> wrote: > > On Mon, 2008-03-24 at 15:46 -0700, Ankur Shah wrote: > > Hi Oleg, > > > > Thanks for the response. The server that i am running (acting as a > client in > > this particular case) is working with multiple servers (hosting > different > > webservices) with each having a primary and a failover pair. From this > > perspective the thought was that rather than having different classes > (all > > having their own business logic around invoking the service) handle the > > connection failed attempt, somehow have some central code that attempts > to > > connect to the primary and fails over to the backup. I also wanted to > make > > sure that in case of a connection failure with primary, a new pool is > > established against the backup server. > > > > From this perspective, an after thought that I had was this. I was going > to > > extend the MultiThreadedHttpConnectionManager and have a failover > capable > > connection manager. In there, i was thinking about exposing a method (or > a > > new constructor) that allows backup host and ports to be added. This > manager > > will cache a map of primary and backup server. In the overriden > > getConnectionWithTimeout method, i'd have super return me a connection > that > > i'll check and make sure that is valid and if not, i'll go to my cache, > get > > the backup host config and open up a connection to that. > > > > Let me know if you think this would be a good idea or not. > > > > Ankur > > > > Ankur > > My recommendation would be to implement the fail-over support as a > service on top of HttpClient > > (1) execute a request against the primary host > (2) if an exception is thrown, see whether it can be treated as > recoverable > (3) if so, mark the primary host as unavailable for a certain period > time and retry the request against the secondary host > (4) when the quarantine time elapses, mark the primary host as > potentially available > (5) repeat > > Hope this helps > > Oleg > > > > On Mon, Mar 24, 2008 at 12:47 PM, Oleg Kalnichevski <[EMAIL PROTECTED]> > > wrote: > > > > > > > > On Thu, 2008-03-20 at 22:05 -0700, Ankur Shah wrote: > > > > I am using httpclient to connect to a remote server. Now for each > > > primary > > > > server there's also a backup failover server that i must talk to if > > > > connection attempts with the primary server fails. To achieve > > > > this what i'd ideally like to do is have HttpClient use a custom > factory > > > > that tries to create a socket connection with the primary server and > if > > > that > > > > fails (or times out), it'll go about talking to backup server (and > > > retry a > > > > few times before giving up altogether). > > > > > > > > Now, searching on the web, i did find references to a > > > > MultiHomeProtocolSocketFactory (that extends DefaultSocketFactory) > that > > > is > > > > presumably in apache contrib package. But what that does is that in > the > > > > overriden > > > > createSocket method, it takes host as a param (among other thing) > and > > > then > > > > simply does a InetAddress.getAllByName which is not what i want. > From > > > what i > > > > understand this caters to a DNS based failover which is not the case > > > here. > > > > > > > > What i'd ideally like to do is create a factory and have a > createSocket > > > > method that takes primary and secondary host and port as args and > then > > > tries > > > > both. I am not sure though how can i make HttpConnection class > > > > invoke my method. > > > > > > Ankur, > > > > > > What's the point of trying to implement the failover support on the > > > ProtocolSocketFactory level? What's wrong with just retrying failed > > > requests against a secondary server in case the primary one is > > > unavailable? > > > > > > Oleg > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >
