假设我使用的是spring boot 然后写了一个添加延迟队列的接口
[Asm] 纯文本查看 复制代码 @Controller
@Api(tags = "测试模块")
@RequestMapping("/test")
@Slf4j
public class TestController {
@Autowired
private RedissonClient redissonClient;
private static final String QUEUE_NAME = "myDelayedQueue";
@ResponseBody
@RequestMapping(value = "/add",method = RequestMethod.POST)
@ApiOperation(value = "add")
public Result addQ( HttpServletRequest request, HttpServletResponse response) {
addTaskToDelayedQueue("123",10,TimeUnit.SECONDS);
return Result.success();
}
// 添加任务到延迟队列
public void addTaskToDelayedQueue(String task, long delay, TimeUnit timeUnit) {
RDelayedQueue<String> delayedQueue = redissonClient.getDelayedQueue(redissonClient.getQueue(QUEUE_NAME));
delayedQueue.offer(task, delay, timeUnit);
}
}
然后做了一个定时任务去接收延迟队列消息
[Asm] 纯文本查看 复制代码 @Autowired
private RedissonClient redissonClient;
private static final String QUEUE_NAME = "myDelayedQueue";
// 处理队列中的任务
@Scheduled(cron = "0/1 * * * * *") // 每分钟检查一次队列
public void processDelayedQueue() {
RQueue<String> queue = redissonClient.getQueue(QUEUE_NAME);
String task;
while ((task = queue.poll()) != null) {
// 处理任务
System.out.println("Processing task: " + task);
}
}
正常来说 我请求接口 十秒后这个任务接收到 但是如果我这样操作
请求接口成功后关掉spring boot,等待20秒后,再启动后这个任务就暂时不会收到,只有我再次去调用添加的接口,才会收到这个任务,有什么办法能让他启动后能立即收到这个消息吗? |