公众号 API QPS 限制与指数退避重试策略

2026-10-20 公众号API 阅读量:50
公众号API

阅读数接口的限流通常不止一层。微信侧至少存在接口维度每日配额、access_token 应用维度总量、IP 维度频率三类限制,而公开文档未必给出每一层的精确阈值。因此,“卡着某个固定 QPS 调用”并不可靠;更稳妥的策略是:一旦收到限流响应,就按退避节奏自动后撤,而不是立即重发。本文对应支柱页第三节“调用被限流时”,把重试逻辑拆成可落地的参数与判断顺序。公众号文章阅读数实时接口完整指南

一、先分清三类频控信号

429 或 45009 通常表示配额或频率超限,适合退避重试;45011 表示每分钟频率限制,语义是“下一分钟再试”,退避窗口应与分钟粒度对齐;40001 / 42001 表示 access_token 无效或过期,不应退避等待,而应刷新 token 后重试。把“可重试”和“不可重试”的错误分开处理,是重试逻辑的第一原则。各类错误与异常值的对应关系,可参见阅读数接口返回异常值的常见原因。

公众号API

二、指数退避的四个参数

指数退避的基本公式是:等待时间 = 最小退避基数 × (2 ^ 已重试次数) + 随机抖动。落地时可以固定四个参数:

最小退避基数:500ms 至 1s 起步。

最大重试次数:阅读数这类短周期可恢复的读接口,通常控制在 5–6 次以内;低延迟同步场景可收紧到 3 次以内。

最大等待上限:为退避时间封顶,例如 30 秒,避免间隔无限膨胀。

随机抖动:在等待时间上叠加随机量,防止多个并发客户端同一时刻集中重试。

三、批量场景不要把并发打满

批量采集多个账号时,最常见的失败原因不是接口不可用,而是瞬时请求密度过高。公开实践中反复出现的建议是:在批量循环中主动加入不低于 10 秒级别的延时,并加入“连续空数据计数器”——当连续超过一定篇数返回空值时,立即终止脚本并告警,而不是继续重试到配额耗尽。更稳妥的架构是队列 + 固定数量 worker,由受控速率消费待采集 URL,而不是一次性 fan-out 全部请求。具体实现可延伸阅读公众号多账号批量查询阅读数的实现方式。

公众号API

FAQ

45009 和 45011 处理方式一样吗?
不完全一样。45009 是配额超限,通常按天级维度等待或使用配额恢复能力;45011 是每分钟频率限制,下一分钟再试。

重试次数越多越好吗?
不是。超过一定次数后继续重试只会消耗配额并加重限流。应为读接口设置明确的最大重试次数和最终失败告警。

多个进程共用同一个 access_token 会怎样?
容易触发并发刷新和配额竞争。应使用共享缓存和锁,避免每个进程各自拉取 token

No:93019