hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ankur Shah" <ankurdots...@gmail.com>
Subject Re: Apache HttpClient - Using custom socket factory for failover support
Date Tue, 25 Mar 2008 21:44:05 GMT
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 <olegk@apache.org> 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 <olegk@apache.org>
> > 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: httpclient-users-unsubscribe@hc.apache.org
> > > For additional commands, e-mail: httpclient-users-help@hc.apache.org
> > >
> > >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message