We have a requirement where based on a variable the rate limit has to be set dynamically.
For spikeIdentifier as A = 2pm
For spikeIdentifier as B =10pm
When 1 st request with (spikeIdentifier as A) reaches proxy at 12th sec . It is success ,but when 2nd request with (spikeIdentifier as B) reaches proxy at 20th sec . It is getting rejected. Below is code snippet
Please help !. If it is expected scenario , Please suggest any alternate.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest">
<DisplayName>SpikeArrest</DisplayName>
<Properties/>
<Rate ref="spikearrestRate"/>
<Identifier ref="spikeIdentifier"/>
</SpikeArrest>
If you are having only 2 rate limits, you can use 2 Spike Arrest Policies, and put condition in both of them and this way, each call will hit one policy based on condition and skip the other one:
First Policy:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SpikeArrest async="false" continueOnError="false" enabled="true" name="Spike-Arrest-1">
<DisplayName>Spike Arrest-1</DisplayName>
<Properties/>
<Identifier ref="request.header.some-header-name"/>
<MessageWeight ref="request.header.weight"/>
<Rate>10pm</Rate>
</SpikeArrest>
Second Policy:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SpikeArrest async="false" continueOnError="false" enabled="true" name="Spike-Arrest-2">
<DisplayName>Spike Arrest-2</DisplayName>
<Properties/>
<Identifier ref="request.header.some-header-name"/>
<MessageWeight ref="request.header.weight"/>
<Rate>2pm</Rate>
</SpikeArrest>
Proxy Endpoints - default:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
<Description/>
<FaultRules/>
<PreFlow name="PreFlow">
<Request>
<Step>
<Name>Spike-Arrest-1</Name>
<Condition>(request.queryparam.a == 1)</Condition>
</Step>
<Step>
<Name>Spike-Arrest-2</Name>
<Condition>(request.queryparam.a == 2)</Condition>
</Step>
</Request>
<Response/>
</PreFlow>
<PostFlow name="PostFlow">
<Request/>
<Response/>
</PostFlow>
<Flows/>
<HTTPProxyConnection>
<BasePath>/spikedemo</BasePath>
<Properties/>
<VirtualHost>default</VirtualHost>
<VirtualHost>secure</VirtualHost>
</HTTPProxyConnection>
<RouteRule name="default">
<TargetEndpoint>default</TargetEndpoint>
</RouteRule>
</ProxyEndpoint>
1 Like