一个可扩展的报警系统Quick-Alarm
时间:2022-05-06
本文章向大家介绍一个可扩展的报警系统Quick-Alarm,主要内容包括一个可扩展的报警系统Quick-Alarm、目标、设计、任务拆解、小结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
一个可扩展的报警系统Quick-Alarm
背景
日常的系统中,报警是不可缺少的一环,目前报警方式很多,最常见的有直接打日志,微信报警,短信报警,邮件报警等;而涉及到报警,一般不可避免的需要提前设置一些基本信息,如报警方式,报警频率,报警用户,开关等;
另外一个常见的问题是一般采用的是单一的报警方式,比如不管什么类型的报警全部都用短信方式触达,然后就会发现手机时常处于被淹没的状态了,久而久之对报警短信就不会敏感了
目标
因此我们准备设计一个通用的报警框架
- 可以自由选择报警方式,
- 支持用户自定义报警方式拓展
- 支持动态的报警配置,
- 支持用户自定义报警规则拓展
- 支持报警方式自动切换规则设定
- 支持报警方式自定义自动切换规则拓展
设计
整体来说,报警主要可以划分为三个步骤,如下:
- 提交报警:对外部使用者提供的接口
- 选择报警:根据报警相关信息,选择具体的报警执行单元
- 执行报警:实现具体的报警逻辑
从任务划分上来看,比较清晰简单,但是每一块的内容又必须可以拓展,
- 选择报警:
- 报警规则的制定
- 报警规则加载器
ConfLoader
- 报警规则变更的触发器
ConfChangeTrigger
- 报警规则解析器
-
ConfParse
: 解析文本格式报警规则为业务对象 -
AlarmSelector
:根据报警规则和报警类型,选择具体报警执行器AlarmExecute
-
- 执行报警:
- 线程池执行(以防止影响主业务流程)
- AlarmExecute的动态拓展(支持用户自定义的报警器实现)
- 实际的报警逻辑
根据上面的拆解,在应用启动的时候,就有一些事情必须去做了
- ConfLoader的选择
- 报警规则加载
- AlarmExecute的加载(包括默认的+自定义实现的)
下图显示在应用启动时,报警规则解析的相关步骤
至于报警执行器的加载就比较简单了,如下图
因此,整个的工作流程如下图
任务拆解
通过前面的任务设计之后,对需要做的东西有了一个大概的脉络了,因此在正式操刀实现之前,下对整个架构进行任务拆解,看下可以具体的执行步骤可以怎么来
- 最直接的就是设计报警执行器
AlarmExecute
- 定义基本接口
- 制定自定义扩展规则
- 接下来就是设计报警规则
- 如何加载报警规则?
- 报警规则具体的定义细则
- 报警规则的解析:即根据报警类型来获取报警执行器
- 报警规则动态更新支持
- 报警线程池
- 维护报警队列
- 报警的计数与频率控制
- 封装对外使用接口
所以,通过上面的分析可以看出,这个系统的结构还是蛮简单的,整个只需要四个部分就可以搞定,其中最主要的就是前面两个了,后面将分别说明
小结
做一个东西,当然是希望可以带来一些用处,或者能学习到什么东西,才不枉花费精力来折腾一下,那么我们这个报警系统,究竟有什么用,或者可以从中学习到什么东西呢?
用途:
- 支持灵活可配的报警规则,以及具体报警业务的自定义拓展
- 目标就是统一报警的使用姿势,也就是不管什么报警,都一个姿势,但是内部可以玩出各种花样,对使用者而言就方便简洁了
学习:
抛开特有的知识点,可以抽象一些公共可用的地方,大概就下面这两点了
- 我们可以如何支持功能的动态可拓展
- 线程池的使用
- 什么是Kotlin?Java终结者?
- cordova插件-Device Motion
- cordova插件-Device Orientation
- cordova插件-Dialogs
- SpringCloud动态刷新配置信息
- cordova插件-Device
- hadoop源码解析2 - conf包中Configuration.java解析
- junit入门实例
- cordova插件- Network Information
- SpringCloud配置中心客户端读取配置
- cordova插件- Inappbrowser
- SpringCloud配置中心高可用搭建
- hadoop压缩与解压
- cordova插件- Media
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法