记一次Quartz状态ERROR的排错(服务多实例下一定要保证最新代码)

在服务多实例环境下,遇到Quartz任务调度出现ERROR状态的问题。由于历史错误代码导致周期告警任务无法执行,ERROR状态不会自动恢复。通过调用resume接口恢复任务,同时强调在多实例中必须确保所有节点代码同步,以防止数据错误。以前曾遇到类似问题,由于旧的Docker实例未关闭,导致部分数据错误。排查此类问题时要注意检查是否有未关闭的旧服务实例。
摘要由CSDN通过智能技术生成

问题

服务:jobmgr(任务调度模块)
目前有三种job

  1. HttpPing拨测任务,定时get一下url,监控服务是否存活(多节点则域名解析成ip)
  2. 周期性聚合产生报告/告警(每1小时查询数据看是达到阈值触发告警)
  3. 告警恢复任务

现象:
告警恢复任务是昨晚上新加的job, 同时影响周期告警(原逻辑add:周期告警没出错后产生一个恢复job),
完了之后部署到开发环境,报错。代码有些BUG,修改之后,本地调试(开发环境停止),发现拨测任务正常运行, 周期告警全部无动静,并且没有任何异常抛出。


找问题

查看运行中的job:

 @Override
    public List<JobView> listJobs() throws JobSchedueException { // TODO: 记录数太多?
        List<JobView> jobViews = new ArrayList<>();
        try {
            for (String groupName : sched.getJobGroupNames()) {
                for (JobKey jobKey : sched.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {
                    String jobName = jobKey.getName();
                    String jobGroup = jobKey.getGroup();

                    // name and group
                    JobDetail jobDetail = new JobDetail();
                    jobDetail.setName(jobName);
                    jobDetail.setGroup(jobGroup);
                    JobView jobView = new JobView();
                    jobView.setJobDetail(jobDetail);

                    // params
                    org.quartz.JobDetail qJobDetail = sched.getJobDetail(jobKey);
                    if (null != qJobDetail.getJobDataMap()) {
                        Map<String, Object> params = new HashMap<>();
                        params.putAll(qJobDetail.getJobDataMap());
                        jobDetail.setParams(params);
                    }
                    List<Trigger> triggers = (List<Trigger>) sched.getTriggersOfJob(jobKey);
                    for (Trigger trigger : triggers) { // 应该只有一个
                        trigger.getNextFireTime();
                        if (trigger instanceof CronTrigger) {
                            CronTrigger cronTrigger = (Cron
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值