一、什么是定时任务
定时任务是每个业务常见的需求,比如每分钟扫描超时支付的订单,每小时清理一次数据库历史数据,每天统计前一天的数据并生成报表等等。
随着微服务和云计算的兴起,定时任务技术也是发展迅速,不仅能做单机的定时任务,而且在分布式系统下应用也很广泛,成为了业务做兜底、数据处理的第一选择。
二、定时任务为什么需要通知
定时任务现在在业务数据处理中的比重越来越重,如果业务数据处理失败了,需要及时通知到业务方,确保了服务的可靠性和稳定性。同时,好的定时任务通知系统,还能分析任务失败的原因(比如堆栈信息)并通知给业务方,帮助用户快速定位问题。
根据通知的类型,大概可以有以下几类:
- 成功通知:任务执行成功,把结果通知给用户。比如统计前一天的数据并把GaaP结果通过短信等渠道发送给对应负责人。
- 超时通知:任务执行超时,通知用户。
- 失败通知:任务执行失败,通知用户。
- 机器异常通知:运行的机器下线或者繁忙,通知用户。
三、自研定时任务报警通知
如果是自研的定时任务系统,或者使用了开源定时任务框架(比如Quartz),想要增加报警通知能力,我们可以采取什么方案呢?从实时性角度来看,短信和电话通知实时性最高,但是这两种方案需要比较大的成本,比如短信通知需要短信平台。如果没有短信平台,我们也可以采用邮件和webhook通知。
3.1、邮件
每个邮件服务器都由SMTP服务器和POP3服务器构成,其中SMTP服务器负责发邮件的请求,而POP3负责收邮件的请求。通过SMTP与POP3即可实现邮件的收发。
邮件发送原理图文章来源:https://www.toymoban.com/news/detail-434651.html
- 配置邮件服务器
以网易163邮件为例,在发送方邮箱设置里,开启POP3/SMTP服务文章来源地址https://www.toymoban.com/news/detail-434651.html
- 以Java代码为例,发送邮件的demo
import org.junit.Test;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Properties;
public class SendMailDemo {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.setProperty("mail.host","smtp.163.com");//设置发送方邮箱服务器
prop.setProperty("mail.transport.protocol","smtp");//邮件发送协议
prop.setProperty("mail.smtp.auth","true");//需要验证用户名密码
Session session = Session.getDefaultInstance(prop);
Transport ts = session.getTransport();
String mailUser = "xxx@163.com"; //邮箱的账号
String mailPasswd = "123456789"; //邮箱的密码
ts.connect("smtp.163.com", mailUser, mailPasswd);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(mailUser));
//
到了这里,关于定时任务报警通知解决方案详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!