企业微信API开发里,消息发送不能只考虑"能不能发",还要考虑发送频率怎么控制。
尤其是自动回复、群通知这类场景,如果多个任务同时触发,很容易在短时间内产生大量请求。
最简单的做法:加发送间隔
不要让业务代码循环调用接口:
任务1 → 立即发送
任务2 → 立即发送
任务3 → 立即发送
任务4 → 立即发送
可以把消息放进队列,由发送任务统一消费:
业务产生消息 → 消息队列 → 发送任务 → API
这样发送速度就由消费者控制,而不是由业务请求决定。
不同群聊最好分开控制
如果所有群共用一个发送队列,一个活跃群可能影响其他群。
实际项目可以按照 roomId 或业务标识做分组,每个群单独维护发送状态。
例如:
群A:消息1 → 等待 → 消息2 → 等待 → 消息3
群B:消息1 → 等待 → 消息2
这样更容易控制单个群的发送节奏。
还要处理重复消息
频率控制解决的是"发得太快",消息去重解决的是"同一条发多次"。
这两个逻辑最好分开:
去重 → 入队 → 频控 → 调API → 记录结果
如果发送失败,也不要立即无限重试,可以设置最大重试次数,并记录失败原因。
实际开发中,消息发送量一大,队列、频控、重试、幂等基本都会一起出现。提前把这几个环节拆开,后面扩展起来会简单很多。