You are browsing unreleased documentation.
With consumer groups, you can define rate limiting tiers and apply them to subsets of application consumers.
You can define consumer groups as tiers, for example:
- A gold tier consumer group with 1000 requests per minute
- A silver tier consumer group with 10 requests per second
- A bronze tier consumer group with 6 requests per second
Consumers that are not in a consumer group default to the Rate Limiting advanced plugin’s configuration, so you can define tier groups for some users and have a default behavior for consumers without groups.
To use consumer groups for rate limiting, you need to:
- Create one or more consumer groups
- Create consumers
- Assign consumers to groups
Create rate limiting tiers
-
Create a consumer group named
Gold
:curl -i -X POST http://localhost:8001/consumer_groups \ --data name=Gold
Response:
{ "created_at": 1638915521, "id": "8a4bba3c-7f82-45f0-8121-ed4d2847c4a4", "name": "Gold", "tags": null }
-
Create a consumer,
Amal
:curl -i -X POST http://localhost:8001/consumers \ --data username=Amal
Response:
{ "created_at": 1638915577, "custom_id": null, "id": "8089a0e6-1d31-4e00-bf51-5b902899b4cb", "tags": null, "type": 0, "username": "Amal", "username_lower": "amal" }
-
Add
Amal
to theGold
consumer group:curl -i -X POST http://localhost:8001/consumer_groups/Gold/consumers \ --data consumer=Amal
Response:
{ "consumer_group": { "created_at": 1638915521, "id": "8a4bba3c-7f82-45f0-8121-ed4d2847c4a4", "name": "Gold", "tags": null }, "consumers": [ { "created_at": 1638915577, "id": "8089a0e6-1d31-4e00-bf51-5b902899b4cb", "type": 0, "username": "Amal", "username_lower": "amal" } ] }
-
Enable the plugin on the consumer group:
curl -i -X POST http://localhost:8001/consumer_groups/gold/plugins/ \ --data name=rate-limiting-advanced \ --data config.limit=5 \ --data config.window_size=30 \ --data config.window_type=sliding \ --data config.retry_after_jitter_max=0 \
This configuration sets the rate limit to five requests (
config.limit
) for every 30 seconds (config.window_size
).