# zest-notify
**Repository Path**: zestcc/zest-notify
## Basic Information
- **Project Name**: zest-notify
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-07-11
- **Last Updated**: 2026-07-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ZestNotify — 统一消息通知中枢
> **通知即服务 (Notification as a Service)** — 将通知能力从业务系统中解耦,提供统一的路由、编排、分发和审计。
---
## 产品定位
ZestNotify 是一个**企业级统一消息通知中枢**,对标 PagerDuty / Opsgenie 的通知编排能力 + 发送通道聚合。核心差异化:
- **多通道聚合**:钉钉、企微、邮件、短信、Webhook、Push — 统一管理,一处配置全局生效
- **智能路由**:按严重度、时段、收件人偏好自动选择最优通道
- **升级策略**:通知未确认 → 自动升级到更高级别通道或负责人
- **排班管理**:时间轮转排班,确保通知触达正确的人
- **全链路可观测**:每条通知的发送/到达/已读/确认全程追踪
- **双模部署**:嵌入模式(Starter)零依赖集成 / 独立服务集中管理
---
## 功能矩阵
| 模块 | 功能 | 状态 |
|------|------|------|
| **渠道管理** | 钉钉机器人 / 企业微信 / 邮件 / 短信 / Webhook / Slack / Push | ✅ v1.0 |
| **通知模板** | FreeMarker 模板引擎 / 变量注入 / 多格式 (Text/Markdown/HTML) | ✅ v1.0 |
| **分发引擎** | 令牌桶限流 / 重试 / 熔断 / 异步批量 | ✅ v1.0 |
| **收件人管理** | 用户组 / ALL / RANDOM / ROUND_ROBIN 策略 | ✅ v1.0 |
| **升级策略** | 时间轮转 / 升级链 / 超时未确认升级 | ✅ v1.0 |
| **静默规则** | 时间窗口 / 周期性 / 关键词匹配 | ✅ v1.0 |
| **排班管理** | 日/周/自定义轮转 / 换班 / 例外 | ✅ v1.0 |
| **通知历史** | 全量审计 / 重新发送 / 导出 / 统计分析 | ✅ v1.0 |
| **健康看板** | 渠道可用性 / 发送成功率 / 延迟分布 | ✅ v1.0 |
| **Webhook 接入** | 外部系统通过 API 接入通知 | ✅ v1.0 |
| **SPI 插件** | 自定义通知通道 / 身份认证 / 事件广播 | ✅ v1.0 |
---
## 架构设计
```
┌─────────────────────────────────────────────────────────┐
│ 业务系统 / 外部系统 │
│ zest-scheduler zest-auth zestflow zest-monitor ... │
└──────────────┬──────────────────────────┬──────────────┘
│ HTTP API │ SDK / Starter
▼ ▼
┌─────────────────────────────────────────────────────────┐
│ ZestNotify Server │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 渠道管理 │ │ 模板引擎 │ │ 分发引擎 │ │ 升级策略 │ │
│ ├──────────┤ ├──────────┤ ├──────────┤ ├──────────┤ │
│ │ 收件人 │ │ 静默规则 │ │ 排班管理 │ │ 通知历史 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │ │
│ ┌──────────────────────┼──────────────────────────┐ │
│ │ Plugin SPI │ 通知通道插件 │ │
│ │ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌────┐│ │
│ │ │钉钉 ││企微 ││邮件 ││短信 ││Slack ││Push││ │
│ │ └──────┘└──────┘└──────┘└──────┘└──────┘└────┘│ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ 数据层 │
│ MySQL (渠道/模板/历史) | Redis (限流/排班/缓存) │
└─────────────────────────────────────────────────────────┘
```
### 双模部署
```
嵌入模式 (Starter)
业务应用引入 zest-notify-spring-boot-starter
→ 自动配置 NotifyDispatchService + 渠道管理
→ 零网络开销,同进程调用
→ 适合单体/小规模
独立模式 (Server)
部署 zest-notify-server
→ REST API 接收通知请求
→ 集中管理渠道/模板/策略
→ 适合微服务/大规模
```
---
## 快速开始
### 嵌入模式
```xml
com.zestcc.www
zest-notify-spring-boot-starter
1.0.0
```
```yaml
zest-notify:
enabled: true
channel:
jdbc:
enabled: true
```
```java
@Autowired
private NotifyDispatchService notifyDispatchService;
// 发送通知
notifyDispatchService.send(NotifyRequest.builder()
.title("订单异常告警")
.content("订单 #12345 支付超时")
.severity("CRITICAL")
.channelCodes(Arrays.asList("dingtalk-team", "email-ops"))
.build());
```
### 独立模式
```bash
# 启动服务
java -jar zest-notify-server.jar
# 调用 API
curl -X POST http://localhost:9010/api/v1/notify/send \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-d '{
"title": "订单异常",
"content": "订单 #12345 支付超时",
"severity": "CRITICAL",
"channelCodes": ["dingtalk-team"]
}'
```
---
## 模块说明
| 模块 | 说明 |
|------|------|
| `zest-notify-common` | 枚举、DTO、常量、模板引擎(零框架依赖) |
| `zest-notify-plugin-api` | Notifier SPI 接口定义 |
| `zest-notify-core` | 核心领域服务 + 持久层 |
| `zest-notify-server` | Spring Boot 独立服务 |
| `zest-notify-spring-boot-starter` | 嵌入模式自动配置 |
| `zest-notify-client` | Java SDK 客户端 |
| `plugins/` | 通知渠道 SPI 实现 |
---
## 通知通道一览
| 通道 | 类型 | 特性 |
|------|------|------|
| 钉钉机器人 | `DINGTALK_ROBOT` | Markdown / Text + 签名校验 |
| 企业微信机器人 | `WECOM_ROBOT` | Markdown / Text |
| 邮件 | `EMAIL` | HTML / Plain + SMTP / SSL |
| 短信 | `SMS` | 模板短信 / 验证码 |
| Webhook | `WEBHOOK` | POST JSON + Bearer Token |
| Slack | `SLACK` | Block Kit / Message |
| Push | `PUSH` | WebSocket / SSE |
---
## 配置说明
```yaml
zest-notify:
enabled: true
server:
port: 9010
dispatch:
rate-limit: 120 # 每分钟最大发送量
retry-max: 3 # 失败重试次数
timeout-ms: 10000 # 发送超时
batch-size: 50 # 批量发送大小
channel:
jdbc:
enabled: true # 启用数据库存储
cache:
type: caffeine # caffeine | redis
```
---
## 技术栈
| 层 | 技术 |
|----|------|
| 语言 | Java 17+ |
| 框架 | Spring Boot 3.2.x |
| 持久化 | MyBatis-Plus 3.5.x, MySQL 8.0 |
| 缓存 | Caffeine / Redis (Redisson) |
| 模板 | FreeMarker |
| 调度 | ShedLock |
| JWT | jjwt 0.12.x |
| 前端 | Vue 3.4 + Element Plus 2.7 + Vite 5 |
| 构建 | Maven |
| 部署 | Docker / Kubernetes |
---
## 生态集成
| 项目 | 集成方式 | 用途 |
|------|---------|------|
| zest-scheduler | AlertSPI → Notify API | 任务失败/超时告警 |
| zest-auth | AlertPublisher → Notify API | 安全事件通知 |
| zestflow | ChainGateway → Notify API | 流程异常通知 |
| zest-monitor | 告警引擎 → Notify API | 监控告警分发 |
---
## 开发计划
- [x] v1.0 — 渠道管理 + 模板引擎 + 分发引擎 + 收件人管理
- [x] v1.0 — 升级策略 + 静默规则 + 排班管理
- [x] v1.0 — 通知历史 + 统计看板 + 健康监控
- [x] v1.0 — SPI 插件机制 + 7 种通知通道
- [x] v1.0 — 双模部署 (嵌入 + 独立)
- [ ] v1.1 — 通知确认回执 + 用户偏好
- [ ] v1.2 — AI 智能通知合并 + 通知时段优化
- [ ] v1.3 — 多语言国际化模板
---
## License
Apache License 2.0