hustmsg-server — 多渠道消息推送系统
基于 Go + Gin + Kafka + Redis 的工业级消息推送网关,支持邮件、短信、飞书等多渠道异步分发,提供模板管理、优先级调度、滑动窗口限流、定时消息等开箱即用的能力。
API 接收 → 限流判定 → 异步入队 → 消费者调度 → 渠道推送 → 状态回写
四级优先级 :4 个独立 Kafka Topic + goroutine 池隔离,高优消息不被低优阻塞
滑动窗口限流 :Redis ZSET + Lua 脚本实现三维复合限流,无边界毛刺
多渠道策略 :策略 + 工厂模式解耦下游推送组件,新增渠道不改主流程
定时消息 :Redis ZSET 存储投递时间戳,Lua 原子脚本到期精准弹出
MySQL 降级 :Kafka 不可用时自动切换 MySQL 轮询模式,保障可用性
# 启动基础设施 (MySQL 8.0, Redis 7, Kafka 3.6)
make docker-run
# 初始化数据库表
mysql -h 127.0.0.1 -P 3307 -u root -p < sql/msgcenter.sql
# 构建并运行
make msgsvr
./bin/main --config=./config/config-test.toml
# 压测验证
bash wrkbench/run_all.sh
组件
选型
用途
语言
Go 1.16+
高性能并发
Web 框架
Gin
RESTful 路由
ORM
GORM v2
MySQL 持久化
缓存/限流
Redis + Lua
滑动窗口限流、分布式锁、模板缓存
消息队列
Kafka
异步削峰、优先级队列
推送渠道
gomail / 阿里云 SMS / 飞书 API
邮件、短信、即时消息
容器化
Docker Compose
本地环境一键编排
├── src/
│ ├── main.go # 启动入口
│ ├── config/ # 配置加载
│ ├── constant/ # 错误码、Lua 脚本、枚举
│ ├── initialize/ # 路由注册
│ ├── ctrl/
│ │ ├── msg/ # HTTP 控制器 (send_msg, template CRUD)
│ │ ├── consumer/ # Kafka/MySQL 消费者 + 策略工厂
│ │ ├── msgpush/ # 推送实现 (email/sms/lark)
│ │ ├── ctrlmodel/ # 请求/响应 DTO
│ │ ├── handler/ # 通用 Handler 模式
│ │ └── tools/ # 限流器、模板替换、消息记录
│ └── data/ # GORM 模型 + CRUD + 缓存
├── wrkbench/ # 压测 & 限流验证脚本
├── docker-compose.yml # 基础设施编排
├── sql/msgcenter.sql # 数据库初始化
├── config/config-test.toml # 测试配置
└── Makefile # 构建命令
方法
路径
说明
POST
/msg/send_msg
发送消息
GET
/msg/get_msg_record
查询消息记录
POST
/msg/create_template
创建模板
GET
/msg/get_template
查询模板
POST
/msg/update_template
更新模板
POST
/msg/del_template
删除模板
所有接口统一返回格式:{"code": 0, "msg": "ok", ...}
模式
30s 请求量
QPS
P99
Kafka + 滑动窗口
27.7 万
~9K
42ms
MySQL 降级
26.8 万
~8.9K
70ms