Commit b2f7b835 by gdj

尝试修复断点续飞任务重复生成问题。

parent ba5b1b18
......@@ -47,6 +47,8 @@ public final class RedisConst {
public static final String WAYLINE_JOB_BREAK_POINT_PREFIX = "wayline_job_break_point" + DELIMITER;
public static final String WAYLINE_JOB_BREAK_POINT_CREATE_PREFIX = "wayline_job_break_point_create" + DELIMITER;
public static final Integer WAYLINE_JOB_BREAK_POINT_ALIVE_SECOND = 60 * 60 * 24;
public static final String OSD_PREFIX = "osd" + DELIMITER;
......
......@@ -260,4 +260,19 @@ public class RedisOpsUtils {
public static Double zIncrement(String key, Object value, double delta) {
return redisTemplate.opsForZSet().incrementScore(key, value, delta);
}
/**
* SETNX + 过期时间(原子)
*
* @param key redis key
* @param value 值
* @param timeout 过期时间
* @param unit 时间单位
* @return true:设置成功(第一次) false:已存在
*/
public static boolean setNx(String key, String value, long timeout, TimeUnit unit) {
Boolean result = redisTemplate.opsForValue().setIfAbsent(key, value, timeout, unit);
return Boolean.TRUE.equals(result);
}
}
......@@ -105,4 +105,11 @@ public interface IWaylineRedisService {
// 删除 自动断点续飞
Boolean delBreakPointWaylineJobDockSn(String jobId);
/**
* 判断是否生成对应的断点续飞任务
* @param jobId
* @return
*/
Boolean setBreakPointWaylineJobNX(String jobId);
}
......@@ -107,7 +107,11 @@ public class SDKWaylineService extends AbstractWaylineService {
// 删除redis记录
waylineRedisService.delBreakPointWaylineJobDockSn(taskId);
// 自动创建一个30分钟之后的任务
eventPublisher.publishEvent(new BreakPointWaylineJobEvent(taskId, breakPointInfo));
if (waylineRedisService.setBreakPointWaylineJobNX(taskId)) {
eventPublisher.publishEvent(new BreakPointWaylineJobEvent(taskId, breakPointInfo));
} else {
log.info("the breakpoint task is created : {}", taskId);
}
}
}
}
......
......@@ -15,6 +15,7 @@ import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
/**
* @author sean
......@@ -127,4 +128,14 @@ public class WaylineRedisServiceImpl implements IWaylineRedisService {
return RedisOpsUtils.del(RedisConst.WAYLINE_JOB_BREAK_POINT_PREFIX + jobId);
}
/**
* 判断是否生成对应的断点续飞任务
* @param jobId
* @return
*/
@Override
public Boolean setBreakPointWaylineJobNX(String jobId) {
return RedisOpsUtils.setNx(RedisConst.WAYLINE_JOB_BREAK_POINT_CREATE_PREFIX + jobId, "1", 10, TimeUnit.MINUTES);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment