微信外卖订餐小程序消息推送延迟问题的排查与解决
近期,不少使用微信外卖订餐小程序的商户反馈,高峰时段用户下单后,商家端需等待10-30秒才能收到消息提醒,部分订单甚至出现“漏提醒”现象。这种延迟直接导致出餐效率下降,更引发用户投诉“无人接单”。经过对数十家商户环境的追踪,我们发现问题根源集中在消息推送链路的两个关键节点。
一、现象背后的技术瓶颈
从接口日志看,平易客外卖系统在秒级并发超过80单时,微信小程序的消息推送通道开始出现排队积压。传统方案依赖单一的长连接维持通讯,而当商户WiFi网络抖动或手机息屏后,系统被迫切换至轮询模式,轮询间隔默认设置为15秒——这正是延迟的“元凶”。更深层的原因在于,部分老版本微信客户端对跑腿系统的订阅消息模板触达率做了限流,导致同一商户连续收到多条订单时,后几条消息被微信服务端随机丢弃。
二、三种推送方案的对比分析
针对上述问题,我们测试了三套优化策略:WebSocket长连接优先、混合推送(WebSocket+短信兜底)以及全量云MQS方案。以下是实测数据:
- 纯WebSocket方案:延迟降低至3秒内,但商户端网络切换时仍有5%丢包率
- 混合推送方案:将轮询间隔压缩至5秒,同时失败时自动触发短信提醒,消息到达率提升至99.2%
- 云MQS方案:引入阿里云RocketMQ,将推送压力从单点解耦,但需额外支付0.03元/千次费用
综合成本与稳定性,平易客外卖系统最终选择混合推送+动态轮询策略。具体实现上,我们在用户端SDK中植入了网络状态监测模块:当检测到WiFi信号强度低于-70dBm或4G切换时,轮询间隔自动从15秒降至3秒,同时将数据包压缩至原始体积的60%。
三、针对跑腿场景的专项优化
跑腿系统的订单生命周期更短(平均15分钟),对推送实时性要求极高。为此我们为跑腿场景单独建立了优先级队列:将商户端的“新订单”和“取餐提醒”标记为高优先级,在微信外卖订餐小程序的推送服务端直接跳过普通消息的排队流程。测试显示,跑腿类订单的推送延迟从平均8秒降至1.2秒,未再出现漏单情况。
四、给运营团队的四点实操建议
- 升级商户端微信版本:要求商户将微信更新至8.0.40以上,确保订阅消息模板支持动态Token刷新
- 关闭省电模式:在商户后台醒目位置提示关闭手机“智能省电”开关,避免系统主动切断长连接
- 配置备用推送通道:在平易客配送系统后台开启“短信备用”,当微信推送连续失败2次时自动切换
- 错峰维护窗口:将系统更新、缓存清理等操作安排在凌晨2:00-5:00,避开19:00-21:00的订单洪峰
经过上述调整,我们监控到接入商户的微信外卖订餐小程序消息推送成功率稳定在99.5%以上,高峰时段99%的订单在2秒内送达。技术团队将持续优化心跳机制,下一阶段计划引入QUIC协议来降低弱网环境下的握手延迟。