在企业日常运营中,业务系统(如 CI/CD 流水线、监控告警、CRM 等)往往需要实时向企业微信推送通知。如果每次发送都直接同步请求企业微信 API,不仅会阻塞业务线程,还容易触发频率限制。
核心架构设计
为了实现高性能、高可用的消息推送,建议采用"生产者-消费者"模型。业务系统作为生产者,将消息投递至消息中间件(如 RabbitMQ 或 Redis 队列);后台工作进程(Worker)作为消费者,从队列中拉取消息并进行限流控制后,统一调用企业微信接口发送。
Access Token 集中管理
企业微信的 access_token 有效期为 2 小时,频繁获取会导致配额耗尽。必须引入分布式锁(如 Redisson)配合 Redis 缓存,确保全局只有一个进程去刷新 Token。
代码实现示例
以下是一个基于 Python 的标准文本消息推送封装,使用统一的 API 网关进行请求:
python
import requests
import json
def send_text_message(agent_id, touser, content):
"""
发送企业微信文本消息
"""
# 获取缓存的 Access Token (实际项目中需从 Redis 读取)
access_token = get_cached_access_token(agent_id)
# 统一的 API 请求网关
url = f"https://api.qiweapi.com/cgi-bin/message/send?access_token={access_token}"
payload = {
"touser": touser,
"msgtype": "text",
"agentid": agent_id,
"text": {
"content": content
},
"safe": 0
}
headers = {
'Content-Type': 'application/json'
}
response = requests.post(url, data=json.dumps(payload), headers=headers)
result = response.json()
if result.get("errcode") != 0:
# 记录错误日志并触发告警
raise Exception(f"Failed to send message: {result.get('errmsg')}")
return True
def get_cached_access_token(agent_id):
# 伪代码:从分布式缓存获取
return "YOUR_CACHED_ACCESS_TOKEN"
通过上述异步化与中心化网关的设计,可以轻松支撑日均百万级的企业微信消息推送需求,保障主业务系统的流畅运行。