接口调频
接口调频对单个 Open API operation 生效:按 (appkey, operationId) 维护 1 秒滑动窗口,超过 QPS 返回 1008 并附带 Retry-After: 1。默认未配置即不限频。
概念
| 项 | 值 |
|---|---|
| 窗口长度 | 1000ms 滑动窗口 |
| 单应用最多覆盖 | 512 个 operation |
| QPS 范围 | 0-10000;0 表示该接口不限频 |
| 超限响应 | HTTP 429,code=1008,Retry-After: 1 |
与协议频率的区别
协议声明的 sendRatePerMinute 与配额 messageRatePerMinute 当前都未在服务端强制;唯一生效的接口级限流是本页配置。
前置条件
- 服务端已启动(默认
http://127.0.0.1:8080),控制台入口http://127.0.0.1:8080/console/#ratelimit。 - 已设置
X-Admin-Secret(默认dev-admin;控制台会保存在浏览器 localStorage 的im.admin.secret)。 - 已创建应用并在控制台顶部选中应用(模块接口路径都带
{appkey})。
步骤
- 查看当前覆盖
enabled为 false 表示没有任何覆盖,即全放行。 - 设置覆盖(整体覆盖)
提交
overrides映射;未提交的 operation 恢复不限频。 - 验证 429
对同一 operation 在 1 秒内发起超过 QPS 的请求,应返回 429 + Retry-After。
参数表
| 操作 | 方法与路径 | 请求体 |
|---|---|---|
| 查询 | GET /api/admin/apps/{appkey}/ratelimit | — |
| 设置 | POST /api/admin/apps/{appkey}/ratelimit | {overrides:{"operationId":qps}} |
示例
把单聊发布限制为 10 QPS,再解除
Shell
curl -sS -X POST "http://127.0.0.1:8080/api/admin/apps/demo/ratelimit" \
-H 'X-Admin-Secret: dev-admin' \
-H 'content-type: application/json' \
-d '{"overrides":{"message.private.publish":10}}'
curl -sS -X GET "http://127.0.0.1:8080/api/admin/apps/demo/ratelimit" \
-H 'X-Admin-Secret: dev-admin'
# qps=0 = 不限频;空对象 = 全部解除
curl -sS -X POST "http://127.0.0.1:8080/api/admin/apps/demo/ratelimit" \
-H 'X-Admin-Secret: dev-admin' \
-H 'content-type: application/json' \
-d '{"overrides":{}}'常见问题
为什么设置了还没限流?
确认 operationId 拼写与调用路径一致(限流键是 operationId,不是 URL)。
客户端 WS 发送会被限吗?
不会。调频只作用于 Open API 分发;客户端长连接有自己的协议频率声明(未强制)。
429 应该怎么重试?
读取 Retry-After(当前固定 1 秒)后重试;不要立即重试造成放大。
相关链接
- 控制台功能索引:8 个模块与其它页面
- 控制台指南:控制台整体说明
- 运营后台指南:Admin API 全量参考
- 限频、配额与容量限制
- 状态码