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>
User | Count |
---|---|
7 | |
2 | |
2 | |
2 | |
1 |