• 定时任务报警通知解决方案详解


    一、什么是定时任务

    定时任务是每个业务常见的需求,比如每分钟扫描超时支付的订单,每小时清理一次数据库历史数据,每天统计前一天的数据并生成报表等等。

    随着微服务和云计算的兴起,定时任务技术也是发展迅速,不仅能做单机的定时任务,而且在分布式系统下应用也很广泛,成为了业务做兜底、数据处理的第一选择。

    二、定时任务为什么需要通知

    定时任务现在在业务数据处理中的比重越来越重,如果业务数据处理失败了,需要及时通知到业务方,确保了服务的可靠性和稳定性。同时,好的定时任务通知系统,还能分析任务失败的原因(比如堆栈信息)并通知给业务方,帮助用户快速定位问题。

    根据通知的类型,大概可以有以下几类:

    • 成功通知:任务执行成功,把结果通知给用户。比如统计前一天的数据并把GaaP结果通过短信等渠道发送给对应负责人。
    • 超时通知:任务执行超时,通知用户。
    • 失败通知:任务执行失败,通知用户。
    • 机器异常通知:运行的机器下线或者繁忙,通知用户。

    三、自研定时任务报警通知

    如果是自研的定时任务系统,或者使用了开源定时任务框架(比如Quartz),想要增加报警通知能力,我们可以采取什么方案呢?从实时性角度来看,短信和电话通知实时性最高,但是这两种方案需要比较大的成本,比如短信通知需要短信平台。如果没有短信平台,我们也可以采用邮件和webhook通知。

    3.1、邮件

    每个邮件服务器都由SMTP服务器和POP3服务器构成,其中SMTP服务器负责发邮件的请求,而POP3负责收邮件的请求。通过SMTP与POP3即可实现邮件的收发。

    邮件发送原理图

    1. 配置邮件服务器

    以网易163邮件为例,在发送方邮箱设置里,开启POP3/SMTP服务

    1. 以Java代码为例,发送邮件的demo
    1. import org.junit.Test;
    2. import javax.mail.Message;
    3. import javax.mail.Session;
    4. import javax.mail.Transport;
    5. import javax.mail.internet.InternetAddress;
    6. import javax.mail.internet.MimeMessage;
    7. import java.io.PrintWriter;
    8. import java.io.StringWriter;
    9. import java.util.Properties;
    10. public class SendMailDemo {
    11. public static void main(String[] args) throws Exception {
    12. Properties prop = new Properties();
    13. prop.setProperty("mail.host","smtp.163.com");//设置发送方邮箱服务器
    14. prop.setProperty("mail.transport.protocol","smtp");//邮件发送协议
    15. prop.setProperty("mail.smtp.auth","true");//需要验证用户名密码
    16. Session session = Session.getDefaultInstance(prop);
    17. Transport ts = session.getTransport();
    18. String mailUser = "xxx@163.com"; //邮箱的账号
    19. String mailPasswd = "123456789"; //邮箱的密码
    20. ts.connect("smtp.163.com", mailUser, mailPasswd);
    21. MimeMessage message = new MimeMessage(session);
    22. message.setFrom(new InternetAddress(mailUser));
  • 相关阅读:
    SLAM从入门到精通(用c++实现机器人运动控制)
    TypeScript_基本类型
    vue导出excel使用xlsx、file-saver、xlsx-style、yxg-xlsx-style 遇到的坑
    Java多线程基础
    彩色相机工作原理——bayer格式理解
    NASM汇编教程翻译02 第二讲 程序正确退出
    EventBus 一篇文章就够了
    【开源】最近写了一个简单的网址导航网站
    这些并发容器的坑,你要谨记!
    【唠唠嵌入式】__嵌入式开发需要从0开始造轮子吗?
  • 原文地址:https://blog.csdn.net/weixin_43970890/article/details/126507101