吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 451|回复: 4
收起左侧

[求助] Redisson延迟队列客户端挂掉的问题请教

[复制链接]
ppgjx 发表于 2024-8-15 22:33
假设我使用的是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秒后,再启动后这个任务就暂时不会收到,只有我再次去调用添加的接口,才会收到这个任务,有什么办法能让他启动后能立即收到这个消息吗?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

许我浅笑而安 发表于 2024-8-15 23:24
本帖最后由 许我浅笑而安° 于 2024-8-15 23:27 编辑

[Java] 纯文本查看 复制代码
@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);  
    }  
}
静似晨荷 发表于 2024-8-16 09:03
gwsgws 发表于 2024-8-16 09:06
beimo 发表于 2024-8-16 09:43
我是来学习的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 23:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表