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]

Reply via email to