Sample 54: Session Affinity Load Balancing Between 3 Endpoints
            
<definitions xmlns="http://ws.apache.org/ns/synapse">
    <sequence name="main" onError="errorHandler">
        <in>
            <send>
                <endpoint>
                    <!-- specify the session as the simple client session provided by Synapse for
                                            testing purpose -->
                    <session type="simpleClientSession"/>
                    <loadbalance>
                        <endpoint>
                            <address uri="http://localhost:9001/services/LBService1">
                                <enableAddressing/>
                            </address>
                        </endpoint>
                        <endpoint>
                            <address uri="http://localhost:9002/services/LBService1">
                                <enableAddressing/>
                            </address>
                        </endpoint>
                        <endpoint>
                            <address uri="http://localhost:9003/services/LBService1">
                                <enableAddressing/>
                            </address>
                        </endpoint>
                    </loadbalance>
                </endpoint>
            </send>
            <drop/>
        </in>
        <out>
            <!-- Send the messages where they have been sent (i.e. implicit To EPR) -->
            <send/>
        </out>
    </sequence>
    <sequence name="errorHandler">
        <makefault response="true">
            <code xmlns:tns="http://www.w3.org/2003/05/soap-envelope" value="tns:Receiver"/>
            <reason value="COULDN'T SEND THE MESSAGE TO THE SERVER."/>
        </makefault>
        <send/>
    </sequence>
</definitions>
            
Objective
                
                    Showcase the ability of Synapse to act as a session aware load balancer with
                    simple client sessions
                
             
            
Pre-requisites
                
                    
                        
- 
                            Deploy the LoadbalanceFailoverService in the sample Axis2 server (go to
                            samples/axis2Server/src/LoadbalanceFailoverService and run 'ant')
                        
- 
                            Start 3 instances of the Axis2 server on different ports as follows
                            
./axis2server.sh -http 9001 -https 9005 -name MyServer1
 ./axis2server.sh -http 9002 -https 9006 -name MyServer2
 ./axis2server.sh -http 9003 -https 9007 -name MyServer3
 
- 
                            Start Synapse using the configuration numbered 54 (repository/conf/sample/synapse_sample_54.xml)
                            
                                Unix/Linux: sh synapse.sh -sample 54
 Windows: synapse.bat -sample 54
 
 
            
Executing the Client
                
                    Above configuration is same as the load balancing configuration in
                    sample 52, except that the session type is specified
                    as 'simpleClientSession'. This is a client initiated session, which means that
                    the client generates the session identifier and sends it with each request. In
                    this sample, client adds a SOAP header named ClientID containing the identifier
                    of the client. Synapse binds this ID with a server on the first request and sends
                    all successive requests containing that ID to the same server. Now switch to
                    samples/axis2Client directory and run the client using the following command to
                    check this in action.
                
                
ant loadbalancefailover -Dmode=session
                
                    In the session mode, client continuously sends requests with three different
                    client (session) IDs. One ID is selected among these three IDs for each request
                    randomly. Then client prints the session ID with the responded server for each
                    request. Client output for the first 10 requests are shown below.
                
                
[java] Request: 1 Session number: 1 Response from server: MyServer3
[java] Request: 2 Session number: 2 Response from server: MyServer2
[java] Request: 3 Session number: 0 Response from server: MyServer1
[java] Request: 4 Session number: 2 Response from server: MyServer2
[java] Request: 5 Session number: 1 Response from server: MyServer3
[java] Request: 6 Session number: 2 Response from server: MyServer2
[java] Request: 7 Session number: 2 Response from server: MyServer2
[java] Request: 8 Session number: 1 Response from server: MyServer3
[java] Request: 9 Session number: 0 Response from server: MyServer1
[java] Request: 10 Session number: 0 Response from server: MyServer1
... 
                
                    You can see that session ID 0 is always directed to the server named MyServer1.
                    That means session ID 0 is bound to MyServer1. Similarly session 1 and 2 are bound
                    to MyServer3 and MyServer2 respectively.
                
             
         
        
Back to Catalog