Sample 370: Introduction to Throttle Mediator and Concurrency Throttling

<definitions xmlns="http://ws.apache.org/ns/synapse"> <sequence name="main"> <in> <throttle id="A"> <policy> <!-- define throttle policy --> <wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:throttle="http://www.wso2.org/products/wso2commons/throttle"> <throttle:ThrottleAssertion> <throttle:MaximumConcurrentAccess>10</throttle:MaximumConcurrentAccess> </throttle:ThrottleAssertion> </wsp:Policy> </policy> <onAccept> <log level="custom"> <property name="text" value="**Access Accept**"/> </log> <send> <endpoint> <address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </endpoint> </send> </onAccept> <onReject> <log level="custom"> <property name="text" value="**Access Denied**"/> </log> <makefault response="true"> <code xmlns:tns="http://www.w3.org/2003/05/soap-envelope" value="tns:Receiver"/> <reason value="**Access Denied**"/> </makefault> <send/> <drop/> </onReject> </throttle> </in> <out> <throttle id="A"/> <send/> </out> </sequence> </definitions>

Objective

Showcase the ability of Synapse to throttle incoming requests based on the concurrency level

Pre-requisites

  • Deploy the SimpleStockQuoteService in the sample Axis2 server and start Axis2
  • Start Synapse using the configuration numbered 370 (repository/conf/sample/synapse_sample_370.xml)
    Unix/Linux: sh synapse.sh -sample 370
    Windows: synapse.bat -sample 370

Executing the Client

Above configuration specifies a throttle mediator inside the in mediator. Therefore, all request messages directed to the main sequence will be subjected to throttling. Throttle mediator has 'policy', 'onAccept' and 'onReject' tags at top level. The 'policy' tag specifies the throttling policy for throttling messages. This sample policy only contains a component called 'MaximumConcurrentAccess'. This indicates the maximum number of concurrent requests that can pass through Synapse on a single unit of time. To test concurrency throttling, it is required to send concurrent requests to Synapse. With this configuration if Synapse receives 20 requests concurrently from clients, then approximately half of those will succeed while the others being throttled. The client command to try this is as follows.

ant stockquote -Dsymbol=IBM -Dmode=quote -Daddurl=http://localhost:8280/

It's not that easy to try this sample out using the sample Axis2 client. For better results, consider using a load testing tool like Apache Bench or Java Bench.

Back to Catalog