聊聊AOP实现系统告警

网站建设3年前发布
31 0 0

在开发的过程中会遇到各种各样的开发问题,服务器宕机、网络抖动、代码本身的bug等等。针对代码的bug,我们可以提前预支,通过发送告警信息来警示我们去干预,尽早处理。,通过在企业钉钉群,添加群机器人的方式,通过机器人向群内发送报警信息。至于钉钉机器人怎么创建,发送消息的api等等,请参考官方文档。,同样的套路,企业微信也是,在企业微信群中,添加群机器人。通过机器人发送告警信息。具体请看官方文档。,与上述不同的是,邮件是发送给个人的,当然也可以是批量发送,只实现了发送文本格式的方式,至于markdown格式,有待考察。邮件发送相对比较简单,这里就不展开赘述。,@Alarm标记在方法上使用,被标记的方法发生异常,会根据配置,读取配置信息,发送异常堆栈信息。使用方法如下所示:,title,告警消息标题:可以定义为业务信息,如导师身份计算。,messageType,告警消息展示类型:目前支持text文本类型,markdown类型。,templateId,消息模板id:与配置文件中配置的模板id一致。,successNotice,正常情况是否也需要发送告警信息,默认值是fasle,表示不需要发送。当然,有些业务场景正常情况也需要发送,比如:支付出单通知等。,202303060130135511257793bd907999941222ec392c3168875e711,定义一个抽象接口AlarmTemplateProvider,用于被具体的子类实现。,抽象类BaseAlarmTemplateProvider实现该抽象接口。,具体实现类YamlAlarmTemplateProvider,实现从配置文件中读取模板,该类在项目启动时,会被加载进spring的bean容器。,抽象类BaseAlarmTemplateProvider还有其他两个子类,分别是MemoryAlarmTemplateProvider和JdbcAlarmTemplateProvider。但是这两个子类暂时还未实现逻辑,后续可以自行扩展。,两个类中都有Function<String, AlarmTemplate>接口,为函数式接口,可以供外部自行去实现逻辑。,该类内部保存了一个容器,主要用于缓存真正的发送类。,抽象接口,只提供一个发送的方法。,与抽象的模板提供器AlarmTemplateProvider一样的套路,该接口有一个抽象的实现类BaseWarnService,该类对外暴露send方法,用于发送消息,内部用doSendMarkdown,doSendText方法实现具体的发送逻辑,当然具体发送逻辑还是得由其子类去实现。,主要实现了钉钉发送告警信息的逻辑。,主要实现了发送企业微信告警信息的逻辑,主要实现邮件告警逻辑。,运用了springboot自定义的starter,再META-INF包下的配置文件spring.factories下,配置上该类。,自动装配类,用于装载自定义的bean。,主要借助spring的切面技术,以及springboot的自动装配原理,实现了发送告警逻辑。对业务代码无侵入,只需要在业务代码上标记注解,就可实现可插拔的功能,比较轻量。,编程文档:https://gitee.com/cicadasmile/butte-java-note,应用仓库:https://gitee.com/cicadasmile/butte-flyer-parent,

© 版权声明

相关文章