一个功能强大的多渠道通知管理系统,支持 WebSocket 实时推送、短信、以及主流手机厂商推送通道。采用 DDD 分层架构设计,配备现代化的科技感管理界面。
- 🎯 多渠道推送:支持 WebSocket、阿里云短信、iOS、华为、小米、OPPO、VIVO、荣耀、一加等 9 种推送通道
- 📥 RabbitMQ 集成:支持通过消息队列接收推送请求,实现异步解耦
- 🔄 循环发送:支持消息循环发送,可实时启停控制
- 🔁 失败重试:自动重试机制,可配置重试次数和间隔
- 📊 实时监控:WebSocket 实时推送消息状态更新
- 🎨 科技感 UI:深色主题、流光动画、毛玻璃效果
- 🏗️ DDD 架构:清晰的分层设计,易于扩展和维护
- 📱 响应式设计:适配不同屏幕尺寸
- Java 21 - 编程语言
- Spring Boot 3.3.5 - 应用框架
- MyBatis-Plus - ORM 框架
- MySQL 8.0+ - 数据库
- RabbitMQ - 消息队列
- Maven - 构建工具
- Lombok - 代码简化
- WebSocket - 实时通信
- Vue 3.5 - 前端框架
- Vite 8.0 - 构建工具
- Element Plus - UI 组件库
- Axios - HTTP 客户端
- Vue Router - 路由管理
notification/
├── notification-common/ # 公共模块(工具类、常量、异常等)
├── notification-domain/ # 领域层(实体、枚举、领域服务)
├── notification-infrastructure/ # 基础设施层(数据访问、外部服务)
├── notification-service/ # 应用服务层(业务逻辑)
├── notification-application/ # 应用层(用例、DTO)
├── notification-web/ # Web 层(控制器、配置)
├── notification-admin/ # 前端管理界面(Vue 3)
├── start/ # 启动模块(应用入口)
├── sql/ # 数据库脚本
│ └── schema.sql # 建表脚本
└── pom.xml # Maven 父 POM
- JDK 21+
- Maven 3.6+
- MySQL 8.0+
- RabbitMQ 3.8+(可选,用于消息队列功能)
- Node.js 18+
- npm 9+
git clone https://github.com/your-username/notification.git
cd notification# 登录 MySQL
mysql -u root -p
# 执行建表脚本
source sql/schema.sql编辑 start/src/main/resources/application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/notification?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: your-password
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
virtual-host: /# 编译项目
mvn clean install
# 启动应用
cd start
mvn spring-boot:run后端服务将在 http://localhost:8080 启动
# 进入前端目录
cd notification-admin
# 安装依赖
npm install
# 启动开发服务器
npm run dev前端管理界面将在 http://localhost:5173 启动
- 发送消息:选择消息类型、填写内容和目标,支持循环发送
- 消息列表:查看所有消息,支持按状态筛选
- 循环控制:为成功的消息开启/停止循环发送
- 消息重发:对失败的消息进行重发
- 发送记录:查看每条消息的详细发送历史
- 通道配置:配置各推送通道的密钥和参数
- 启用/禁用:灵活控制各通道的开关状态
- 模板管理:管理阿里云短信模板
- 模板参数:配置模板变量说明
- WebSocket 连接:自动连接 WebSocket 接收实时通知
- 状态同步:消息状态实时更新
- 队列监控:实时查看消息队列状态
- 异步接收:通过 RabbitMQ 接收外部系统的推送请求
- 消息验证:自动验证消息格式和必填字段
- 可靠处理:支持消息确认和失败重试
- 多通道支持:所有推送通道都支持通过 RabbitMQ 发送
- 统计卡片:实时展示各状态消息数量
- 消息列表:支持筛选、循环控制、重发、删除
- 记录弹窗:查看消息详情和发送历史
- 深色主题:护眼的深色配色方案
- 流光动画:卡片悬停流光效果
- 发光效果:按钮和图标发光动画
- 毛玻璃效果:半透明背景模糊
系统已集成 RabbitMQ,支持通过消息队列接收推送请求。
架构设计:
外部系统 → RabbitMQ → NotificationListener → Database → NotificationService → 推送通道
核心组件:
- Exchange:
notification.exchange(Direct类型) - Queue:
notification.queue - RoutingKey:
notification.send
消息格式:
{
"messageType": "WEBSOCKET", // 必填:消息类型
"targetId": "user_001", // 必填:目标标识
"content": "消息内容", // 必填:消息内容
"title": "消息标题", // 可选
"maxRetry": 3, // 可选:最大重试次数,默认3
"templateId": 1, // 可选:短信模板ID
"templateParams": "{}" // 可选:模板参数JSON
}快速测试:
# 发送 WebSocket 消息
curl -X POST 'http://localhost:8080/api/rabbitmq/test/websocket' \
-d 'accountId=user_001' \
-d 'content=Hello RabbitMQ!' \
-d 'title=测试消息'
# 批量发送测试
curl -X POST 'http://localhost:8080/api/rabbitmq/test/batch?count=5'📖 详细使用文档请查看:RABBITMQ_USAGE.md
系统支持以下推送通道:
| 通道 | 类型 | 配置项 |
|---|---|---|
| WebSocket | WEBSOCKET | 无需额外配置 |
| 阿里云短信 | SMS | AccessKeyId, AccessKeySecret, 签名 |
| iOS 推送 | IOS | P8 文件路径, TeamId, KeyId, BundleId |
| 华为推送 | HUAWEI | AppId, AppSecret |
| 小米推送 | XIAOMI | AppSecret, PackageName |
| OPPO 推送 | OPPO | AppKey, MasterSecret |
| VIVO 推送 | VIVO | AppId, AppKey, AppSecret |
| 荣耀推送 | HONOR | AppId, AppSecret |
| 一加推送 | ONEPLUS | AppKey, MasterSecret |
- 发送间隔:5-3600 秒(默认 10 秒)
- 最大重试:0-10 次(默认 3 次)
- 循环控制:可随时启停
-
notification_message - 通知消息表
- 存储所有消息及其状态
- 支持重试和循环发送
-
push_config - 推送配置表
- 各推送通道的配置信息
- 支持动态启用/禁用
-
sms_template - 短信模板表
- 阿里云短信模板管理
- 模板参数配置
-
notification_send_log - 发送记录表
- 记录每次发送尝试
- 包含成功/失败状态和错误信息
| 接口 | 方法 | 路径 | 说明 |
|---|---|---|---|
| 发送消息 | POST | /api/notifications | 创建并发送消息 |
| 获取列表 | GET | /api/notifications | 获取消息列表 |
| 重发消息 | POST | /api/notifications/{id}/retry | 重发消息 |
| 删除消息 | DELETE | /api/notifications/{id} | 删除消息 |
| 获取记录 | GET | /api/notifications/{id}/send-logs | 获取发送记录 |
| 启动循环 | POST | /api/notifications/{id}/loop/start | 启动循环发送 |
| 停止循环 | POST | /api/notifications/{id}/loop/stop | 停止循环发送 |
| 队列状态 | GET | /api/notifications/queue/stats | 获取队列统计 |
| 接口 | 方法 | 路径 | 说明 |
|---|---|---|---|
| 测试WebSocket | POST | /api/rabbitmq/test/websocket | 发送WebSocket测试消息 |
| 测试短信 | POST | /api/rabbitmq/test/sms | 发送短信测试消息 |
| 自定义消息 | POST | /api/rabbitmq/test/custom | 发送自定义JSON消息 |
| 批量发送 | POST | /api/rabbitmq/test/batch | 批量发送测试消息 |
| 全类型测试 | POST | /api/rabbitmq/test/all-types | 发送所有类型消息 |
- 在
notification-domain中添加新的消息类型枚举 - 在
notification-infrastructure中实现推送客户端 - 在
notification-service中注册推送策略 - 在前端添加对应的选项
项目采用 DDD 分层架构,各层职责清晰:
- Domain 层:添加新的领域对象和业务规则
- Infrastructure 层:实现新的数据访问或外部服务
- Service 层:编排业务逻辑
- Application 层:定义新的用例和 DTO
- Web 层:添加新的 REST API
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
- ✨ 初始版本发布
- 🎯 支持 9 种推送通道
- 📥 集成 RabbitMQ 消息队列
- 🔄 循环发送和失败重试
- 🎨 科技感管理界面
- 📊 实时监控和统计
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
Your Name
- GitHub: Nob
⭐ 如果这个项目对你有帮助,请给它一个星标!