基于redission实现延迟队列

35 阅读1分钟
@Component
public class DelayQueueConfig {

    String queueName = "delete_file";

    @Bean
    public RBlockingQueue<String> rBlockingQueue(@Qualifier("redissonClient") RedissonClient redissonClient) {
        return redissonClient.getBlockingQueue(queueName);
    }

    @Bean
    public RDelayedQueue<String> rDelayedQueue(@Qualifier("redissonClient") RedissonClient redissonClient,
                                               @Qualifier("rBlockingQueue") RBlockingQueue<String> blockQueue) {
        return redissonClient.getDelayedQueue(blockQueue);
    }
}
@Component
@Slf4j
public class DeleteUploadFileDelay {

    @Autowired
    private RBlockingQueue<String> rBlockingQueue;

    @Autowired
    @Qualifier("asyncThreadExecutor")
    private ThreadPoolExecutor asyncThreadExecutor;

    @PostConstruct
    public void init() {

        CompletableFuture.runAsync(() -> {
            try {
                String take = rBlockingQueue.take();
                log.info("take:{}", take);
            } catch (Exception e) {
                log.error("DeleteUploadFileDelay error:{}", e.getMessage());
            }
        }, asyncThreadExecutor);

    }

}
@Autowired
private RDelayedQueue<String> rDelayedQueue;

@GetMapping("/test")
public void test(@RequestParam("id") Integer id) {

    log.info("send:{}", id);
    rDelayedQueue.offerAsync(id.toString(), 5, TimeUnit.MINUTES);
}