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
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