@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);
}