消费者限流插件
更新时间 2026-04-21 15:48:57
最近更新时间: 2026-04-21 15:48:57
本文将详细介绍消费者限流插件功能、配置和使用。
功能说明
limit-count-by-client 插件使用固定时间窗口算法,主要用于限制消费者在单个客户端在指定的时间范围内对服务的总请求数,并且会在 HTTP 响应头中返回剩余可以请求的个数.
配置字段
| 名称 | 类型 | 填写要求 | 默认值 | 有效值 | 描述 |
|---|---|---|---|---|---|
| count | integer | 必填 | count> 0 | 每个客户端在指定时间窗口内的总请求数量阈值。 | |
| time_window | integer | 必填 | time_window> 0 | 时间窗口的大小(以秒为单位)。超过该属性定义的时间,则会重新开始计数。 | |
| app_white_list | array[string] | 可选 | 消费者白名单,白名单内的消费者不受该限流规则影响。 | ||
| rejected_code | integer | 可选 | 503 | [200,...,599] | 当请求超过阈值被拒绝时,返回的 HTTP 状态码。 |
| rejected_msg | string | 可选 | 非空 | 当请求超过阈值被拒绝时,返回的响应体。 | |
| error_interrupt | boolean | 可选 | false | 在异常错误时,是否中断用户请求,false 不中断,true 中断,默认不中断。 | |
| rule_map | object | 可选 | 消费者限速规则,约定对指定消费者的限速规则。 |
注意
- 消费者名称可到消费者详情页中查找。
当在作用范围内未开启认证授权时,不存在有效的消费者,此时`app_white_list`和`rule_map`的配置不会生效,将按最外层默认的限流策略生效。
配置示例
limit-count-by-client 使用示例
count: 2
time_window: 60
rejected_code: 503
app_white_list:
- "consumer_name_1"
rule_map:
consumer_name_2:
count: 3
time_window: 10
consumer_name_3:
count: 3
time_window: 10根据该配置场景,存在多条限流规则:
消费者consumer_name_1不受限流影响
消费者consumer_name_2与consumer_name_3在10秒内限流3
其他消费者在60秒内限流2
curl -i http://example.com/index.html在执行测试命令的前两次都会正常访问。其中响应头中包含了 X-RateLimit-Limit 和 X-RateLimit-Remaining 和 X-RateLimit-Reset 字段,分别代表限制的总请求数和剩余还可以发送的请求数以及计数器剩余重置的秒数:
HTTP/1.1 200 OK
......
X-RateLimit-Limit: 2
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 58当第三次进行测试访问时,会收到包含 503 HTTP 状态码的响应头,目前在拒绝的情况下,也会返回相关的头,表示插件生效:
HTTP/1.1 503 Service Temporarily Unavailable
......
X-RateLimit-Limit: 2
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 58配置模板
基础配置案例
# 时间窗口内的请求数量阈值
# [必填]count数值为当前网关实例集群的限流计数。
count: 30
# [必填]时间窗口的大小(以秒为单位)
time_window: 60
# [可选] 消费者白名单,字符串类型最多20个
app_white_list:
- "app_name_1"
- "app_name_2"
# [可选]请求超过阈值被拒绝时,返回的 HTTP 状态码
rejected_code: 429
# [可选]当设置rejected_msg时,非空。默认可不填
# rejected_msg: "Requests are too frequent, please try again later."
# [可选] 在异常错误时,是否中断用户请求,false 不中断,true 中断,默认不中断
error_interrupt: false
# [可选] APP(消费者)限速规则,约定对指定APP(消费者)的限速规则
rule_map:
# 消费者名称
app_1:
# [可选] 当前消费者的限流计数,不传时取最外层默认的count值
count: 3
# [] 当前消费者的限流时间窗口大小(以秒为单位),不传时取最外层的默认time_window值
time_window: 10
# 消费者名称
app_2:
# [可选] 当前消费者的限流计数,不传时取最外层默认的count值
count: 3
# [可选] 当前消费者的限流时间窗口大小(以秒为单位),不传时取最外层的默认time_window值
time_window: 10