Redisson延迟队列客户端挂掉的问题请教
假设我使用的是spring boot 然后写了一个添加延迟队列的接口@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);
}
}
然后做了一个定时任务去接收延迟队列消息
@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秒后,再启动后这个任务就暂时不会收到,只有我再次去调用添加的接口,才会收到这个任务,有什么办法能让他启动后能立即收到这个消息吗? 本帖最后由 许我浅笑而安° 于 2024-8-15 23:27 编辑
@Component
public class StartupRunner implements CommandLineRunner {
@Autowired
private RedissonClient redissonClient;
@Autowired
private TaskRepository taskRepository; // 假设这是一个JPA仓库,用于访问存储任务的数据库
@Override
public void run(String... args) throws Exception {
List<Task> tasks = taskRepository.findAll();
tasks.forEach(task -> {
addTaskToDelayedQueue(task.getPayload(), task.getDelay(), TimeUnit.SECONDS);
});
}
private void addTaskToDelayedQueue(String task, long delay, TimeUnit timeUnit) {
RDelayedQueue<String> delayedQueue = redissonClient.getDelayedQueue(redissonClient.getQueue(QUEUE_NAME));
delayedQueue.offer(task, delay, timeUnit);
}
} 我是来学习的
我是来学习的 我是来学习的
页:
[1]