Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

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                     # 构建命令

API 接口

方法 路径 说明
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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages