Campus-imaotai消息推送集成:PushPlus、Server酱多渠道通知
消息推送系统架构概述
Campus-imaotai的消息推送系统采用异步任务处理架构,通过多渠道通知机制实现预约结果实时触达。系统核心模块位于campus-modular/src/main/java/com/oddfar/campus/business/api/,目前已集成PushPlus推送渠道,可通过简单扩展支持Server酱等其他平台。
推送流程设计
系统推送流程基于事件驱动模型设计:
- 预约任务执行完成后生成操作日志ILog
- 根据日志状态(成功/失败)触发对应通知逻辑
- 通过AsyncManager执行异步推送任务
- 调用第三方推送API完成消息投递
PushPlus渠道配置与实现
1. 开发注册与Token获取
用户需先在PushPlus官网注册账号,获取个人专属Token。该Token作为API调用凭证,需在系统中与用户账号绑定,存储于IUser实体的pushPlusToken字段。
2. 核心实现代码解析
系统通过PushPlusApi.java实现推送功能,核心方法如下:
public static void sendNotice(IUser iUser, ILog operLog) {
String token = iUser.getPushPlusToken();
if (StringUtils.isEmpty(token)) {
return;
}
String title, content;
if (operLog.getStatus() == 0) {
//预约成功通知
title = iUser.getRemark() + "-i茅台执行成功";
content = iUser.getMobile() + System.lineSeparator() + operLog.getLogContent();
} else {
//预约失败通知
title = iUser.getRemark() + "-i茅台执行失败";
content = iUser.getMobile() + System.lineSeparator() + operLog.getLogContent();
}
AsyncManager.me().execute(sendNotice(token, title, content, "txt"));
}
3. 异步推送任务
推送任务通过TimerTask实现异步执行,避免阻塞主流程:
public static TimerTask sendNotice(String token, String title, String content, String template) {
return new TimerTask() {
@Override
public void run() {
String url = "http://www.pushplus.plus/send";
Map<String, Object> map = new HashMap<>();
map.put("token", token);
map.put("title", title);
map.put("content", content);
map.put("template", StringUtils.isEmpty(template) ? "html" : template);
HttpUtil.post(url, map);
}
};
}
Server酱渠道扩展指南
1. 接口设计规范
参照PushPlus实现模式,创建ServerChanApi.java,需包含:
sendNotice(IUser user, ILog log): 业务入口方法sendNotice(String sckey, String title, String content): 推送实现方法- 支持文本/Markdown两种消息格式
2. 核心代码实现
public class ServerChanApi {
private static final String API_URL = "https://sc.ftqq.com/%s.send";
public static void sendNotice(IUser iUser, ILog operLog) {
String sckey = iUser.getServerChanKey(); //需在IUser实体添加该字段
if (StringUtils.isEmpty(sckey)) return;
String title = operLog.getStatus() == 0 ? "i茅台预约成功" : "i茅台预约失败";
String content = String.format("用户: %s\n手机号: %s\n结果: %s",
iUser.getRemark(), iUser.getMobile(), operLog.getLogContent());
AsyncManager.me().execute(() -> {
String url = String.format(API_URL, sckey);
Map<String, Object> params = new HashMap<>();
params.put("text", title);
params.put("desp", content);
HttpUtil.post(url, params);
});
}
}
3. 数据库与前端适配
- 在用户表添加Server酱配置字段:
ALTER TABLE `i_user` ADD COLUMN `server_chan_key` varchar(64) COMMENT 'Server酱SCKEY';
多渠道通知管理
1. 渠道优先级配置
在系统配置中可设置通知渠道优先级,支持:
- 仅PushPlus
- 仅Server酱
- 两者同时发送
- 失败重试机制
2. 推送日志查询
所有推送记录保存在推送日志表,可通过管理界面查看: 推送日志界面
常见问题解决方案
推送失败排查流程
- 检查第三方平台Token/SCKEY是否有效
- 查看系统日志中的网络请求记录
- 确认服务器网络是否能访问第三方API域名
消息格式优化建议
- 成功通知使用绿色标题+简洁结果
- 失败通知使用红色标题+详细错误信息
- 重要操作添加时间戳与唯一标识
【预约成功】2023-10-04 09:00:12
手机号: 138****5678
商品: 贵州茅台酒(壬寅虎年)
门店: 茅台专卖店(北京王府井店)
扩展阅读与资源
- 官方API文档: campus-modular/src/main/java/com/oddfar/campus/business/api/
- 异步任务框架: AsyncManager
- 数据库设计: doc/sql/campus_imaotai-1.0.5.sql
- 前端配置界面: vue_campus_admin/src/views/system/user/
通过本文档配置,您的Campus-imaotai系统将具备完善的多渠道消息推送能力,确保预约结果实时触达,提升用户体验与系统可靠性。系统设计预留了扩展接口,可根据需求添加企业微信、钉钉等更多推送渠道。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





