取消任务
场景:第三接口网络不通,使用延迟任务进行重试,当达到阈值以后,取消任务。
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; }