Hi,
My main project was to develop a load balancing cache manager that can be
registered to a master web service for load balancing.
It is working fine when the master is just responding to one task
application "cache", but then we tried to attach another application to the
master and this is the problem.
////////////////////////////////////////////////////////////////////////////////
Main
////////////////////////////////////////////////////////////////////////////////
public static void main(String[] args) throws Exception{
Component component=new Component();
component.getServers().add( Protocol.HTTP, 8182 ); // Private
component.getServers().add( Protocol.HTTP, 8183); // Public
//Add a new HTTP client
component.getClients().add( Protocol.HTTP );
InetAddress inet = InetAddress.getLocalHost();
String cannonicalHostName = inet.getCanonicalHostName();
/**
* Create virtual Host for Private use
* like registering slaves
*/
VirtualHost privateHost = new VirtualHost(component.getContext());
privateHost.setHostDomain(cannonicalHostName);
privateHost.setHostPort("8182");
VirtualHost proxyHost = new VirtualHost(component.getContext());
proxyHost.setHostDomain(cannonicalHostName);
proxyHost.setHostPort("8183");
proxyHost.setRoutingMode(Router.MODE_NEXT_MATCH);
/**
* cache application
* internal routing
* /webservice/PEITCache
*/
proxyHost.attach(new PEDWProxy("http://rbaa0282562.apr.dhcp.ti.com:50011"));
proxyHost.attach(new PEDWProxy("http://rbaa0282562.apr.dhcp.ti.com:50012"));
/**
* foreign application
* internal routing
* /webservice/foreign
*/
proxyHost.attach(new
PEDWProxy("http://peitlab01.dallab.design.ti.com:30090"));
component.getHosts().add(privateHost);
component.getHosts().add(proxyHost);
//proxyHost.setRoutingMode(Router.MODE_CUSTOM);
component.start();
}
////////////////////////////////////////////////////////////////////////
public class PEDWProxy extends Application
{
public String hostAddress = "";
public PEDWProxy(String hostAddress) {
super();
this.hostAddress = hostAddress;
}
/**
* Creates a root Restlet that will receive all incoming calls.
*/
@Override
public Restlet createInboundRoot() {
// Create a root router
Router router = new Router(getContext());
String target = hostAddress + "{rr}";
Redirector redirector = new Redirector(getContext(), target,
Redirector.MODE_SERVER_OUTBOUND);
// Attach the extractor to the router
router.attachDefault(redirector);
return router;
}
}
////////////////////////////////////////////////////////////////////////
First Problem:
Scenario
First Request: http://localhost:8183/webservice/PEITCache
--> response ok, redirected to http://rbaa0282562.apr.dhcp.ti.com:50011
Second Request: http://localhost:8183/webservice/PEITCache
--> response ok, http://rbaa0282562.apr.dhcp.ti.com:50012
Third Request: http://localhost:8183/webservice/PEITCache
--> response bad, tried to redirect to
http://peitlab01.dallab.design.ti.com:30090, in which i'm expecting that the
request will be redirected to the redirected to
http://rbaa0282562.apr.dhcp.ti.com:50011 or redirected to
http://rbaa0282562.apr.dhcp.ti.com:50012
////////////////////////////////////////////////////////////////////////
Second Problem:
Scenario:
I shutdown the web service in http://rbaa0282562.apr.dhcp.ti.com:50012
First Request: http://localhost:8183/webservice/PEITCache
--> response ok, redirected to http://rbaa0282562.apr.dhcp.ti.com:50011
Second Request: http://localhost:8183/webservice/PEITCache
--> it waits indefinitely for the response coming from
http://rbaa0282562.apr.dhcp.ti.com:50012 which was at shutdown state, how can I
resolve this problem...
Thanks
Sincerely,
Gerald Ternola
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2591105