如何在WSO2 API Manager 3.2.0中按用户对REST API单资源限流
在WSO2 API Manager 3.2.0实现单资源级按订阅用户限流
1. 创建自定义速率限制策略
登录WSO2 AM管理控制台,进入Rate Limiting Policies -> Policies:
- 点击Add Policy,选择Custom Policy
- 填写策略名称(比如
PerUserPerResourceLimit),描述按需补充 - 在Policy Definition中用Synapse语法编写限流规则,核心是结合令牌关联的用户标识与资源路径作为限流维度:
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="PerUserPerResourceLimit"> <wsp:ExactlyOne> <wsp:All> <ratelimit:RateLimit xmlns:ratelimit="http://www.wso2.org/products/wso2commons/ratelimit" type="fixed"> <ratelimit:ID>PerUserPerResource</ratelimit:ID> <ratelimit:TimeUnit>minute</ratelimit:TimeUnit> <ratelimit:Limit>10</ratelimit:Limit> <!-- 可修改为实际需求的限制次数 --> <ratelimit:KeyTemplate>$ctx:api.ut.userName:$ctx:api.uri.template</ratelimit:KeyTemplate> <!-- 组合用户名+资源模板作为限流键,也可替换为$ctx:oauth2.subject用令牌sub字段 --> </ratelimit:RateLimit> </wsp:All> </wsp:ExactlyOne> </wsp:Policy>
- 保存策略
2. 绑定策略到目标API资源
进入发布者控制台打开目标API:
- 切换到Resources标签,找到需要限流的具体资源(比如
/users/{id}) - 点击资源的Edit按钮,进入编辑页
- 在Rate Limiting区域选择刚创建的
PerUserPerResourceLimit策略 - 保存配置后重新发布API(已发布的API需重新发布使配置生效)
3. 验证限流效果
- 使用订阅用户的令牌连续调用目标资源,超过设定的限制次数后
- 网关会返回
429 Too Many Requests响应,说明限流规则生效
关键细节说明
- 限流键逻辑:
$ctx:api.ut.userName对应订阅用户的用户名,$ctx:api.uri.template对应资源的模板路径,二者组合实现“单用户-单资源”的独立限流维度 - 时间单位支持
second/minute/hour/day,可根据业务需求调整 - 需确保API的应用级/全局级限流策略不会覆盖该资源级策略(资源级限流优先级更高)
内容的提问来源于stack exchange,提问作者Ali farahzadi
相关产品推荐
相关产品推荐

