DolphinScheduler技术分析(八)

本文深入分析了DolphinScheduler的Alert模块,详细介绍了如何创建AlertServer实例并启动,以及start方法的工作原理。重点讲解了listWaitExecutionAlert方法,该方法定时从数据库中获取待发送的告警信息,并通过alertSender.run()方法进行处理。emailPlugin.process(alertInfo)部分阐述了如何处理邮件发送,包括验证邮箱、获取收件人信息以及实际发送过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 2021SC@SDUSC

DophinScheduler Alert模块代码分析

Alert服务入口

创建AlertServer 实例对象,调用start方法,启动

public static void main(String[] args) {
        AlertServer alertServer = AlertServer.getInstance();
        alertServer.start();
    }

start方法

  1. 改方通过while(true)循环方式,循环条件通过Stopper.isRunning()判断为TRUE或者FALSE,来实现循环
  2. Thread.sleep 循环体内通过线程每5秒启动一次
  3. 每次启动通过 alertDao.listWaitExecutionAlert()执行具体逻辑
 public void start() {
        logger.info("alert server ready start ");
        while (Stopper.isRunning()) {  //5秒循环
            try {
                Thread.sleep(Constants.ALERT_SCAN_INTERVAL); // 5000 ms
            } catch (InterruptedException e) {
                logger.error(e.getMessage(), e);
                Thread.currentThread().interrupt();
            }
            List<Alert> alerts = alertDao.listWaitExecutionAlert();  // 扫描数据库中表 t_ds_alert 中 alert_status 字段为0等待发送,1成功,2失败 判断是否有需要发送的邮件 如果有
            alertSender = new AlertSender(alerts, alertDao, alertPluginManager);
            alertSender.run();
        }
    }

listWaitExecutionAlert方法

  1. listWaitExecutionAlert方法逻辑功能为通过定时
  2. 到dolphinscheduler配置数据库中执行如下sql
  3. t_ds_alert可以理解成告警信息相关表,在表中查找状态为等待发送的数据
List<Alert> alerts = alertDao.listWaitExecutionAlert();

//调用
public List<Alert> listWaitExecutionAlert(){
        return alertMapper.listAlertByStatus(AlertStatus.WAIT_EXECUTION);
    }

//调用
List<Alert> listAlertByStatus(@Param("alertStatus") AlertStatus alertStatus);

//底层执行sql为
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="org.apache.dolphinscheduler.dao.mapper.AlertMapper">
    <select id="listAlertByStatus" resultType="org.apache.dolphinscheduler.dao.entity.Alert">
        select *
        from t_ds_alert
        where alert_status = #{alertStatus}
    </select>
</mapper>

 alertSender.run()方法

1.alertDao.listWaitExecutionAlert()方法会定时扫描出需要发送的数据,数据会逐条进行分析、发送
2.alertDao.listUserByAlertgroupId(alert.getAlertGroupId())方法通过 t_ds_alert 表 alertgroup_id 去t_ds_user表中查找相应用户的email,即任务运行配置告警通知分组的用户获取email、与收件人的email

for (Alert alert : alertList) {
.......
}

public List<User> listUserByAlertgroupId(int alertgroupId){
        return userAlertGroupMapper.listUserByAlertgroupId(alertgroupId);
}
    

emailPlugin.process(alertInfo)

  1. 处理类
  2. 判断收件人、告警组、抄送人的邮箱是否为空
  3. 满足条件,调用emailManager.send方法

 emailManager.send

public Map<String,Object> send(List<String> receviersList,List<String> receviersCcList,String title,String content,String showType){

        return MailUtils.sendMails(receviersList, receviersCcList, title, content, showType);
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值