罗展丰
Published on 2026-07-09 / 27 Visits
0
0

预警模块架构设计

Warn 模块架构设计

1. 模块概述

Warn(预警管理)模块负责企业级预警消息的全链路管理:从预警节点检测、策略配置、模板渲染到多渠道消息推送。支持按等级(高/中/低)分级告警,支持防重复预警机制,支持定时调度自动检测。

2. 架构分层

┌──────────────────────────────────────────────────────────────────────┐
│  Controller 层(11 个)                                              │
│  WarnInitController          │ WarnChannelController                │
│  WarnTemplateController      │ WarnCategoryController               │
│  WarnNodeController          │ WarnStrategyController               │
│  WarnStrategyLevelController │ WarnStrategyLevelPushController      │
│  WarnStrategyLevelRecipientController                               │
│  WarnLogController           │ WarnLogDetailController              │
├──────────────────────────────────────────────────────────────────────┤
│  Service 层(14 个)                                                 │
│  WarnInitService             │ WarnChannelService                   │
│  WarnTemplateService         │ WarnCategoryService                  │
│  WarnNodeService             │ WarnStrategyService                  │
│  WarnStrategyLevelService    │ WarnStrategyLevelPushService         │
│  WarnStrategyLevelRecipientService                                   │
│  WarnStrategyLevelRecipientObjectService                             │
│  WarnStrategySendService     │ WarnStrategySendHandleService        │
│  WarnLogService              │ WarnLogDetailService                 │
├──────────────────────────────────────────────────────────────────────┤
│  Handle 层(渠道 SPI)                                               │
│  MessageChannelHandle(接口) │ MessageChannelFactory(工厂)        │
│  └─ MessageEmailHandlerHandle(邮件渠道实现)                         │
├──────────────────────────────────────────────────────────────────────┤
│  Seed 数据层                                                         │
│  WarnSeedInitial<T>(API 接口)                                      │
│  ├─ DemoWarnChannelSeedInitial   (渠道种子)                        │
│  ├─ DemoWarnCategorySeedInitial  (业务类种子)                      │
│  ├─ DemoWarnNodeSeedInitial      (节点种子)                        │
│  └─ DemoWarnTemplateSeedInitial  (模板种子)                        │
├──────────────────────────────────────────────────────────────────────┤
│  Entity(11)│ DTO(44)│ Mapper(11)│ Enum(6)│ Convert(7)       │
└──────────────────────────────────────────────────────────────────────┘

3. 核心数据模型

3.1 ER 关系

WarnChannel (消息渠道)
  └── code: sms / email / wecom / dingtalk / innerMessage / app

WarnCategory (业务分类)
  └── WarnNode (预警节点)
        ├── WarnTemplate (预警模板,绑定渠道)
        └── WarnStrategy (预警策略)
              └── WarnStrategyLevel (策略等级: high/middle/low)
                    ├── WarnStrategyLevelPush (推送方式,关联渠道)
                    └── WarnStrategyLevelRecipient (接收人)
                          └── WarnStrategyLevelRecipientObject (接收人对象)

WarnLog (预警日志)
  └── WarnLogDetail (日志明细)

3.2 核心实体

WarnChannel(消息渠道)

字段 类型 说明
code String 渠道编码:sms/email/wecom/dingtalk/innerMessage/app
name String 渠道名称
isEnabled String 状态:1-启用, 0-禁用

WarnCategory(业务分类)

字段 类型 说明
code String 业务编码
name String 业务名称

WarnNode(预警节点)

字段 类型 说明
code String 节点编码
name String 节点名称
categoryId String 所属业务分类ID

WarnTemplate(预警模板)

字段 类型 说明
code String 模板编码
name String 模板名称
channel String 渠道编码
nodeCode String 绑定节点编码
title String 消息标题
content String 消息内容(支持占位符)

WarnStrategy(预警策略)

字段 类型 说明
nodeCode String 关联节点编码
categoryId String 业务分类ID
scheduleId Long 关联调度任务ID
intervalMinutes Integer 检测间隔(分钟)
repeatedWarningType String 防重复类型
prohibitRepeatedCycle Integer 禁重复周期(分钟)
isEnabled String 状态

WarnStrategyLevel(策略等级)

字段 类型 说明
strategyId Long 所属策略ID
level String 等级:high/middle/low

4. 核心流程

4.1 预警发送流程

外部调用: POST /sys/v1/warn-strategy/send
  → WarnStrategySendService.send()
    → 根据 strategyCode 查找策略
    → 查找策略等级(high/middle/low)
    → 按等级查找推送方式(WarnStrategyLevelPush → 渠道)
    → 按等级查找接收人(WarnStrategyLevelRecipient)
    → 渲染模板(WarnTemplate)
    → MessageChannelFactory.getHandler(channelCode)
      → MessageChannelHandle.send()(SPI 扩展)
    → 记录日志(WarnLog + WarnLogDetail)

4.2 初始化流程

调用: POST /sys/v1/warn/init
  → WarnInitService.init()
    → 收集所有 WarnSeedInitial<T> Bean 的种子数据
    → 按类型分组同步:
      1. syncWarnChannel()    → 渠道(按 code 去重)
      2. syncWarnCategory()   → 业务分类(按 code 去重)
      3. syncWarnNode()       → 节点(按 code 去重,关联分类)
      4. syncWarnTemplate()   → 模板(按 code 去重,关联节点)
      5. syncWarnStrategy()   → 策略(按 nodeCode 去重,默认禁用)
      6. syncWarnStrategyLevel() → 策略等级(每策略自动创建 high/middle/low)
    → 批量入库
    → 初始化定时调度任务(PowerJob)

5. 扩展机制

5.1 渠道 SPI

public interface MessageChannelHandle {
    String getChannel();  // 渠道编码
    void send(MessageDTO message);  // 发送消息
}

新增渠道只需实现接口并注册为 Spring Bean,MessageChannelFactory 自动收集。

5.2 种子数据 SPI

public interface WarnSeedInitial<T> {
    List<T> getSeedData();  // 返回种子数据列表
}

支持的种子数据类型:

  • WarnChannel — 渠道
  • WarnCategory — 业务分类
  • WarnNodeSeedDTO — 节点 + 策略配置
  • WarnTemplateSeedDTO — 模板

6. 防重复预警机制

字段 说明
repeatedWarningType 防重复类型
prohibitRepeatedCycle 禁重复周期(分钟)

策略级别支持按时间段防重复,避免同一预警短时间内反复推送。

7. 枚举定义

枚举 值 说明
WarnChannelEnum sms, email, wecom, dingtalk, innerMessage, app 消息渠道
WarnLevelEnum high, middle, low 预警等级
WarnRecipientTypeEnum — 接收人对象类型
WarnReleaseConditionEnum — 预警解除条件
WarnRepeatedWarningTypeEnum — 防重复类型

Comment