本申请涉及大数据,尤其是一种基于周期调度实现告警通信的方法及装置。
背景技术:
1、周期性调度通常依赖于用户定义的时间表来执行任务,这种调度方式具有规律性。目前,quartzjob组件是处理这类任务的常用工具,quartzjob组件是quartz框架中的一个核心组件,用于定义需要被定时执行的任务,它主要用于在程序启动前配置任务。然而,对于需要在程序运行过程中发送告警的情况,quartzjob可能不太适用,因为它不适用于动态的消息通信场景。
2、另一类,scheduledexecutorservice是java并发包(java.util.concurrent)中的一个接口,提供了一种安排和执行定时任务的机制。它是executorservice的一个子接口,专门用于调度任务的执行,scheduledexecutorservice能够处理程序运行期间的任务调度,它通过线程池来管理定时任务的执行。但是,每个任务的执行都需要分配一个独立的线程,这在处理大量任务时可能会导致内存资源的大量消耗。此外,一旦任务提交,其周期性就无法再进行调整,这限制了其灵活性。
技术实现思路
1、本申请的目的在于克服现有技术中在周期性任务调度时内存资源消耗大以及灵活性差的问题,提供一种基于周期调度实现告警通信的方法及装置。
2、第一方面,提供了一种基于周期调度实现告警通信的方法,包括:
3、创建用于缓存和传输通知信息的消息通信单元,并将所述消息通信单元持久化到数据库中;
4、定期执行自定义周期调度组件,其中,所述自定义周期调度组件用于检索并处理数据库中的消息通信单元,并将检索到的消息通信单元及时转发至自定义告警执行器;
5、通过自定义告警执行器以预设的告警通道将告警信息推送至指定客户端。
6、在一些可能的实现方式中,创建用于缓存和传输通知信息的消息通信单元,包括:
7、设定操作单元内容的告警周期以及告警通道,用于在触发告警时通过告警通道发送通知;
8、将操作单元内容、告警周期和告警通道封装成消息通信单元,并添加消息通信单元缓存层;
9、将消息通信单元添加到消息通信单元缓存层。
10、在一些可能的实现方式中,将所述消息通信单元持久化到数据库中,包括:采用容量机制策略和时间机制策略将消息通信单元缓存层中的数据持久化到数据库中,并为每个消息通信单元维护版本号,若数据库中已存在该消息通信单元,则在更新时将该消息通信单元的版本号递增。
11、在一些可能的实现方式中,所述容量机制策略为若消息通信单元缓存层中的容量超过预设值时,则批量写入数据库;所述时间机制策略为若容量不足预设值时,则将检测到当新的一天开始之前的未持久化的数据批量写入数据库。
12、在一些可能的实现方式中,检索并处理数据库中的消息通信单元,并将检索到的消息通信单元及时转发至自定义告警执行器,包括:
13、通过定时任务定期运行自定义周期调度组件,从所述数据库中检索消息通信单元,并将所检索到的通信单元传递给自定义日期解析器;
14、自定义日期解析器从消息通信单元中解析出调度配置,并提取开始时间和频率类型,以筛选出与当前日期匹配的有效调度日期的消息通信单元,针对筛选出的消息通信单元,计算出当日的具体延期执行时间,将消息通信单元和延期执行时间传递给延迟队列;
15、延迟队列存储消息通信单元,并根据预设的延期发送时间安排消息的发送;
16、检查延迟队列是否有消息通信单元,并获取待发送的消息通信单元,从数据库中重新拉取该消息通信单元的最新信息,并比较版本号,若版本号一致,则将消息通信单元发送给自定义告警执行器;否则,销毁该消息通信单元。
17、在一些可能的实现方式中,所述自定义告警执行器用于接收自定义周期调度组件传来的消息通信单元,从所述消息通信单元中提取告警通道类型,并将所述消息通信单元传递给相应的自定义通道执行器,所述自定义通道执行器调用send()方法通过相应的告警通道发送告警,其中,通过实现buildsession()方法和send()方法能够添加新的告警渠道。
18、在一些可能的实现方式中,还包括:监控send()方法的执行状态,若发送失败,消息通信单元将被加入到自定义重试队列,并设定重试次数上限以及记录重试次数。
19、第二方面,提供了一种基于周期调度实现告警通信的装置,包括:
20、封装模块,用于创建用于缓存和传输通知信息的消息通信单元,并将所述消息通信单元持久化到数据库中;
21、定时任务模块,用于定期执行自定义周期调度组件,其中,所述自定义周期调度组件用于检索并处理数据库中的消息通信单元,并将检索到的消息通信单元及时转发至自定义告警执行器;
22、告警执行模块,用于通过自定义告警执行器以预设的告警通道将告警信息推送至指定客户端。
23、第三方面,提供了一种计算机可读存储介质,所述计算机可读介质存储用于设备执行的程序代码,该程序代码包括用于执行如上述第一方面中的任意一种实现方式中方法的步骤。
24、第四方面,提供了一种电子设备,所述电子设备包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如上述第一方面中的任意一种实现方式中的方法。
25、本申请具有如下有益效果:
26、1、本申请在处理消息通信单元时,通过采用缓存技术有效减少了对数据库的频繁i/o操作,显著提高了处理效率,并且支持多种告警方式;
27、2、本申请集成了定时任务和延迟队列,允许用户通过简洁的用户界面轻松配置和调整告警的调度时间,此外,自定义通道执行器能够根据不同的应用场景进行定制,提供灵活且多样化的通知解决方案;
28、3、本申请还具有重试机制,确保在发送失败时能够自动尝试重新发送告警消息,从而增强了告警系统的稳定性和可靠性。
1.一种基于周期调度实现告警通信的方法,其特征在于,包括:
2.根据权利要求1所述的基于周期调度实现告警通信的方法,其特征在于,创建用于缓存和传输通知信息的消息通信单元,包括:
3.根据权利要求2所述的基于周期调度实现告警通信的方法,其特征在于,将所述消息通信单元持久化到数据库中,包括:采用容量机制策略和时间机制策略将消息通信单元缓存层中的数据持久化到数据库中,并为每个消息通信单元维护版本号,若数据库中已存在该消息通信单元,则在更新时将该消息通信单元的版本号递增。
4.根据权利要求3所述的基于周期调度实现告警通信的方法,其特征在于,所述容量机制策略为若消息通信单元缓存层中的容量超过预设值时,则批量写入数据库;所述时间机制策略为若容量不足预设值时,则将检测到当新的一天开始之前的未持久化的数据批量写入数据库。
5.根据权利要求1-4中任一项所述的基于周期调度实现告警通信的方法,其特征在于,检索并处理数据库中的消息通信单元,并将检索到的消息通信单元及时转发至自定义告警执行器,包括:
6.根据权利要求3或4所述的基于周期调度实现告警通信的方法,其特征在于,所述自定义告警执行器用于接收自定义周期调度组件传来的消息通信单元,从所述消息通信单元中提取告警通道类型,并将所述消息通信单元传递给相应的自定义通道执行器,所述自定义通道执行器调用send()方法通过相应的告警通道发送告警,其中,通过实现buildsession()方法和send()方法能够添加新的告警渠道。
7.根据权利要求6所述的基于周期调度实现告警通信的方法,其特征在于,还包括:监控send()方法的执行状态,若发送失败,消息通信单元将被加入到自定义重试队列,并设定重试次数上限以及记录重试次数。
8.一种基于周期调度实现告警通信的装置,其特征在于,包括:
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储用于设备执行的程序代码,该程序代码包括用于执行如权利要求1-7中任一项所述方法的步骤。
10.一种电子设备,其特征在于,所述电子设备包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1-7中任一项所述方法。