package cn.lili.trigger.delay; import cn.lili.cache.Cache; import cn.lili.common.utils.DateUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; /** * 延时队列工厂 * * @author paulG * @since 2020/11/7 **/ @Slf4j public abstract class AbstractDelayQueueMachineFactory { @Autowired private Cache cache; /** * 插入任务id * * @param jobId 任务id(队列内唯一) * @param triggerTime 执行时间 时间戳(毫秒) * @return 是否插入成功 */ public boolean addJob(String jobId, Long triggerTime) { //redis 中排序时间 long delaySeconds = triggerTime / 1000; //增加延时任务 参数依次为:队列名称、执行时间、任务id boolean result = cache.zAdd(setDelayQueueName(), delaySeconds, jobId); log.info("增加延时任务, 缓存key {}, 执行时间 {},任务id {}", setDelayQueueName(), DateUtil.toString(triggerTime), jobId); return result; } /** * 要实现延时队列的名字 * @return 延时队列的名字 */ public abstract String setDelayQueueName(); }