基于单片机的车内儿童检测报警装置的设计(有完整资料)

核心内容摘要

Xilinx FPGA在线升级实战:从通信驱动到ICAP跳转全解析
web页面使用PHP如何进行视频大附件的切片分享?

如何修改exe文件内容和资源,教程工具详解

返利公众号消息推送的可靠性保障模板消息队列化与送达状态追踪大家好我是 微赚淘客系统

0 的研发者省赚客在微赚淘客系统

0中用户完成订单后需通过微信公众号模板消息实时通知返利到账。

然而直接调用微信接口存在网络抖动、限流、Token失效等问题导致消息丢失或延迟。

为保障高可靠推送我们引入消息队列 异步重试 送达状态追踪机制实现

9

95%以上的消息成功送达率。

整体架构设计系统采用三层架构消息生产层业务逻辑触发消息入队消息处理层消费队列调用微信接口并记录状态状态追踪层持久化发送结果支持失败重试与人工干预。

核心依赖组件包括 RabbitMQ或 RocketMQ、Redis用于 Token 缓存、MySQL消息状态表。

消息实体与状态定义首先定义消息模型packagejuwatech.cn.model;importjava.time.LocalDateTime;publicclassWechatTemplateMessage{privateLongid;privateStringopenId;// 用户 openidprivateStringtemplateId;// 模板 IDprivateStringpage;// 跳转小程序页面privateObjectdata;// 模板数据JSONprivateIntegerretryCount;// 重试次数privateStringstatus;// PENDING, SENT, FAILED, EXPIREDprivateLocalDateTimecreateTime;privateLocalDateTimesendTime;// getters setters}状态枚举PENDING待发送SENT已成功发送FAILED发送失败可重试EXPIRED超过最大重试次数或超时如7天未送达

消息入队逻辑在返利结算完成后将消息写入数据库并投递到 MQpackagejuwatech.cn.service;importjuwatech.cn.model.WechatTemplateMessage;importjuwatech.cn.dao.MessageDao;importorg.springframework.amqp.rabbit.core.RabbitTemplate;importorg.springframework.stereotype.Service;ServicepublicclassMessageProducerService{privatefinalMessageDaomessageDao;privatefinalRabbitTemplaterabbitTemplate;publicMessageProducerService(MessageDaomessageDao,RabbitTemplaterabbitTemplate){this.messageDaomessageDao;this.rabbitTemplaterabbitTemplate;}publicvoidenqueueMessage(StringopenId,StringtemplateId,Objectdata){WechatTemplateMessagemsgnewWechatTemplateMessage();msg.setOpenId(openId);msg.setTemplateId(templateId);msg.setData(data);msg.setStatus(PENDING);msg.setRetryCount(

;msg.setCreateTime(LocalDateTime.now());LongidmessageDao.insert(msg);rabbitTemplate.convertAndSend(wechat.notify.exchange,template.send,id);}}

消息消费与微信调用消费者从队列取出消息ID执行发送逻辑packagejuwatech.cn.consumer;importjuwatech.cn.model.WechatTemplateMessage;importjuwatech.cn.service.WechatApiService;importjuwatech.cn.dao.MessageDao;importorg.springframework.amqp.rabbit.annotation.RabbitListener;importorg.springframework.stereotype.Component;ComponentpublicclassTemplateMessageConsumer{privatefinalMessageDaomessageDao;privatefinalWechatApiServicewechatApiService;publicTemplateMessageConsumer(MessageDaomessageDao,WechatApiServicewechatApiService){this.messageDaomessageDao;this.wechatApiServicewechatApiService;}RabbitListener(queueswechat.template.queue)publicvoidhandle(LongmessageId){WechatTemplateMessagemsgmessageDao.findById(messageId);if(msgnull||!PENDING.equals(msg.getStatus()))return;try{booleansuccesswechatApiService.sendTemplateMessage(msg.getOpenId(),msg.getTemplateId(),msg.getData(),msg.getPage());msg.setSendTime(LocalDateTime.now());if(success){msg.setStatus(SENT);}else{handleFailure(msg);}}catch(Exceptione){handleFailure(msg);}finally{messageDao.updateStatus(msg);}}privatevoidhandleFailure(WechatTemplateMessagemsg){intmaxRetry5;if(msg.getRetryCount()maxRetry){msg.setStatus(EXPIRED);}else{msg.setRetryCount(msg.getRetryCount()

;msg.setStatus(FAILED);// 延迟重试1min, 5min, 15min, 1h, 24hlongdelaycalculateDelay(msg.getRetryCount());// 重新入队带延迟requeueWithDelay(msg.getId(),delay);}}privatelongcalculateDelay(intretry){long[]delays{60_000L,300_000L,900_000L,3_600_000L,86_400_000L};returndelays[Math.min(retry-1,delays.length-

];}privatevoidrequeueWithDelay(Longid,longdelayMs){// 使用 RabbitMQ TTL 死信队列 或 RocketMQ 延迟消息// 此处简化为定时任务扫描 FAILED 状态消息生产环境建议用原生延迟队列}}

微信 API 封装与 Token 管理微信 access_token 有效期2小时需全局缓存并自动刷新packagejuwatech.cn.service;importcom.fasterxml.jackson.databind.JsonNode;importjuwatech.cn.util.HttpClientUtil;importorg.springframework.data.redis.core.StringRedisTemplate;importorg.springframework.stereotype.Service;importjavax.annotation.PostConstruct;importjava.util.concurrent.TimeUnit;ServicepublicclassWechatApiService{privatestaticfinalStringTOKEN_KEYwechat:access_token;privatestaticfinalStringAPP_IDwx123456;privatestaticfinalStringSECRETsecret789;privatefinalStringRedisTemplateredisTemplate;publicWechatApiService(StringRedisTemplateredisTemplate){this.redisTemplateredisTemplate;}PostConstructpublicvoidpreloadToken(){refreshAccessToken();}privatevoidrefreshAccessToken(){Stringurlhttps://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credentialappidAPP_IDsecretSECRET;JsonNoderespHttpClientUtil.getJson(url);if(resp.has(access_token)){Stringtokenresp.get(access_token).asText();intexpiresresp.get(expires_in).asInt();redisTemplate.opsForValue().set(TOKEN_KEY,token,expires-300,TimeUnit.SECONDS);}}publicbooleansendTemplateMessage(StringopenId,StringtemplateId,Objectdata,Stringpage){StringtokenredisTemplate.opsForValue().get(TOKEN_KEY);if(tokennull){refreshAccessToken();tokenredisTemplate.opsForValue().get(TOKEN_KEY);if(tokennull)returnfalse;}StringsendUrlhttps://api.weixin.qq.com/cgi-bin/message/template/send?access_tokentoken;StringpayloadbuildPayload(openId,templateId,data,page);JsonNoderesultHttpClientUtil.postJson(sendUrl,payload);returnresult.has(errcode)result.get(errcode).asInt()0;}privateStringbuildPayload(StringopenId,StringtemplateId,Objectdata,Stringpage){// 构造 JSON略return{...};}}

送达状态追踪与监控所有消息状态写入wechat_message_log表支持以下能力定时任务扫描FAILED消息进行补偿管理后台查看失败原因如“用户取消关注”、“模板ID无效”埋点上报 Prometheus监控推送成功率。

关键 SQL 示例-- 查询近1小时失败消息SELECT*FROMwechat_message_logWHEREstatusFAILEDANDcreate_timeNOW()-INTERVAL1HOUR;

异常场景处理用户取关微信返回{errcode:43004}标记为EXPIRED不再重试模板被删除返回40003告警通知运营人员限流返回45009立即暂停发送10分钟后恢复。

通过上述机制系统在日均50万条模板消息推送下保持极低的失败率与人工干预成本。

本文著作权归 微赚淘客系统

0 研发团队转载请注明出处

同学会后美丘里美-同学会后美丘里美应用

相关标签
基于PLC的机械臂控制系统设计 translategemma-27b-it入门指南:理解256-image-token与2K-context协同机制 无需代码!cv_unet_image-colorization让黑白照片变彩色 箭头迷宫2.0来了!内置100关卡+可视化关卡编辑器,这套商业源码绝了!预售 3 折首发! 算力账单异常?Seedance 2.0 Cost-Tagging API启用后,成本归因精度从±41%提升至±3.2% Ostrakon-VL-8B多模态大模型一键部署:基于Python的快速入门指南 当代码段子照进现实:那些年我们遇到的‘八阿哥‘与‘分号刺客‘ KPCA核主成分分析法MATLAB, 主要是降低数据维度。 当输入数据维度太大的时候,程序运行会很慢 N8N是什么?一篇搞懂N8N工作流配置使用教程 3步集成轻量级文档预览:Vue-Office前端组件如何解决企业级文档处理难题 论文查重「避坑」全攻略:Paperxie 四大检测体系如何守住你的毕业「生命线」 BCompare_Keygen实战指南:从环境部署到高级应用 ã€�DEIM创新改进】全网独家创新,注æ„�力改进篇 | AAAI 2026 | 引入Circulant Attention循ç�¯æ³¨æ„�力模å�—,å¢�强网络的全局上下文建模能力,助力 DEIM å�šç›®æ ‡æ£€æµ‹æœ‰æ•ˆæ¶¨ç‚¹ Docker 27存储卷动态扩容终极清单:12项生产就绪检查项、6类异常回滚路径、4种监控埋点模板

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123