@EnableScheduling
@Service
public class DelayedTaskService {
private static final String DELAYED_QUEUE_KEY = "delayedQueue";
@Autowired
private StringRedisTemplate redisTemplate;
public void addTaskToQueue(String taskId) {
long score = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(15L);
redisTemplate.opsForZSet().add(DELAYED_QUEUE_KEY, taskId, score);
}
@Scheduled(fixedRate = 10000)
public void processDelayedTask() {
long score = System.currentTimeMillis();
Set<String> taskIds = redisTemplate.opsForZSet().rangeByScore(DELAYED_QUEUE_KEY, 0, score);
if (!CollectionUtils.isEmpty(taskIds)) {
for (String taskId : taskIds) {
System.out.println("执行了任务:" + taskId);
redisTemplate.opsForZSet().remove(DELAYED_QUEUE_KEY, taskId);
}
}
}
}
@GetMapping("/addTask")
public void addTask(){
String taskId = UUID.randomUUID().toString();
delayedTaskService.addTaskToQueue(taskId);
}