首页 > 其他分享 >取消任务

取消任务

时间:2023-07-05 09:36:53浏览次数:32  
标签:task 删除 取消 redis flag 任务 taskId

场景:第三接口网络不通,使用延迟任务进行重试,当达到阈值以后,取消任务。

taskId——》删除任务——》更新日志状态——》删除redis中的数据

1、根据taskid删除任务,修改任务日志状态为 2(取消)

2、删除redis中对应的任务数据,包括list和zset

    /**
     * 取消任务
     * @param taskId
     * @return
     */
    @Override
    public boolean cancelTask(Long taskId) {
        boolean flag = false;
        //1、删除任务,更新任务日志
        Task task = updateDb(taskId, ScheduleConstants.CANCELLED);

        //2、删除redis
        if(task != null){
            removeTaskFromCache(task);
            flag = true;
        }
        return flag;
    }

    /**
     * 删除redis中的数据
     * @param task
     */
    private void removeTaskFromCache(Task task) {
        String key = task.getTaskType() + "_" + task.getPriority();
        if(task.getExecuteTime() <= System.currentTimeMillis()){
            //从list中删除, 0表示找到多少删除多少
            cacheService.lRemove(ScheduleConstants.TOPIC+key, 0, JSON.toJSONString(task));
        }else{
            cacheService.zRemove(ScheduleConstants.FUTURE+key, JSON.toJSONString(task));
        }
    }

    /**
     * 删除任务,更新任务日志
     * @param taskId
     * @param cancelled
     * @return
     */
    private Task updateDb(Long taskId, int cancelled) {
        Task task = null;
        try {
            //删除任务
            taskinfoMapper.deleteById(taskId);
            //更新任务日志
            TaskinfoLogs taskinfoLogs = taskinfoLogsMapper.selectById(taskId);
            taskinfoLogs.setStatus(cancelled);
            taskinfoLogsMapper.updateById(taskinfoLogs);

            task = new Task();
            BeanUtils.copyProperties(taskinfoLogs, task);
            task.setExecuteTime(taskinfoLogs.getExecuteTime().getTime());
        }catch (Exception e){
            log.error("task cancel exception taskId = {}" + taskId);
        }

        return task;
    }

 

标签:task,删除,取消,redis,flag,任务,taskId
From: https://www.cnblogs.com/fxzm/p/17526770.html

相关文章

  • 6.29 celery分布式异步任务框架
    1.celery:分步式异步任务框架 /1 异步任务/2 延迟任务/3 定时任务/4 celery架构消息中间件(broker):消息队列:可以使用redis,rabbitmq任务执行单元(worker):执行单元执行提交的任务任务执行结果存储(banckend):可以使用mysql,redis/5安装celery模块:cmd中......
  • webapi中用Quartz(定时任务)的步骤
         文件---新建---项目---ASP.NETWEB应用程序---程序命名---webapiNuget---Quartz(/v2.5)创建要在定时任务中执行的工作内容publicclassRJJob:Ijob创建调度任务(确定执行时间)Global.asax中,加入启动代码:JobScheduler.Start();......
  • redis实现延迟任务
    实现思路:发布时间:立即发布、未来要发布list存立即发布,redis中的list是双向链表,方便添加查找性能较高。zset可以去重、排序,存储未来要发布的。 为什么要把任务存储到数据库中?延迟任务是一个通用的服务,任何有延迟需求的任务都可以调用该服务,内存数据库的存储是有限的,需要考虑......
  • 大连人工智能计算平台——华为昇腾AI平台——高性能计算HPC的单任务task的多CPU运行模
    超算是离我们平时生活比较远的一个事情,即使是对于一个计算机专业方向的学生来说,正好实验室得到了华为的超算平台的使用账号,于是就摸索了一下,不得不承认这个东西确实不是普通人能搞的明白的。 基本概念:一个工作Job可以开多个副本,每个副本都是mpirun-N所开出的,每个副本又被叫......
  • 【HZERO】定时任务
    ......
  • 多任务异步协程实现
    1.未实现异步操作代码: 2.实现异步操作代码: ......
  • 【JS错误总结】promise.then 如果没有被 resolve,不会立即执行,而是先执行宏任务,等待 pr
    setTimeout(()=>{console.log('setTimeout')},0)letpromise=newPromise((resolve,reject)=>{console.log('1')setTimeout(()=>{console.log('timeStart')resolve('success�......
  • 解决方案 | win10任务栏假死,桌面鼠标可以动但是无法点击任务栏图标
    1背景今天电脑不知道什么原因,鼠标出现了无法点击任务栏图标的情况,但是桌面上可以晃动。 2解决过程(方法1-3对我无效,但是不代表对你们无效,)方法1:重启资源管理器。方法2:电脑重启、或者关机重启。方法3:win+i,设置-电源和睡眠--从不 除此之外,我还进行了系统还原、文件转移(......
  • 15-7 任务计划管理
    一、修改httpd服务配置文件  信号发送[root@centos8~]#vim/etc/httpd/conf/httpd.conf[root@centos8~]#systemctlstarthttpd重启服务[root@centos8~]#ss-ntl监听端口[root@centos8~]#kill-1进程号(重新读取配置文件)二、脚本重启不正常服务[root@centos8~]......
  • BackUpLogView 系列 - Powershell 在任务计划中执行脚本
     在windows系统中,使用powershell执行脚本,请在写字板中调整相关参数,注意把参数一次性拷贝完整。之所以选择带参数的原因,是避免powershell打开时出现安全性限制对话框导致执行失败powershell.exe-NonInteractive-NoProfile-NoLogo-ExecutionPolicyUnrestricted-File......