如何实现Java中的延迟队列
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下如何实现Java中的延迟队列,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!常见的实现方法主要有:定时任务扫描、RocketMQ延迟队列、Java自动的延迟队列、监听
千家信息网最后更新 2026年11月03日如何实现Java中的延迟队列
小编给大家分享一下如何实现Java中的延迟队列,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
常见的实现方法主要有:定时任务扫描、RocketMQ延迟队列、Java自动的延迟队列、监听Redis Key过期等等
1. DelayQueue
首先,定义一个延迟任务
package com.cjs.example;import lombok.Data;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;/** * @author ChengJianSheng * @since 2021/3/18 */@Datapublic class DelayTask implements Delayed { private Long orderId; private long expireTime; public DelayTask(Long orderId, long expireTime) { this.orderId = orderId; this.expireTime = expireTime; } @Override public long getDelay(TimeUnit unit) { return expireTime - System.currentTimeMillis(); } @Override public int compareTo(Delayed o) { return (int) (getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS)); }}然后,定义一个管理类
package com.cjs.example;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.stereotype.Component;import java.util.concurrent.DelayQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @author ChengJianSheng * @since 2021/3/19 */@Slf4j@Componentpublic class DelayQueueManager implements CommandLineRunner { private DelayQueue queue = new DelayQueue<>(); @Autowired private ParkOrderQueryHandler handler; @Override public void run(String... strings) throws Exception { ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService.execute(new Runnable() { @Override public void run() { while (true) { try { DelayTask task = queue.take(); handler.handle(task); } catch (InterruptedException e) { e.printStackTrace(); } } } }); } public void put(DelayTask task) { queue.put(task); }} 插入任务
@Slf4j@Servicepublic class PayServiceImpl implements PayService { @Autowired private DelayQueueManager delayQueueManager; @Override public void pay() { delayQueueManager.put(new DelayTask(1, 15)); delayQueueManager.put(new DelayTask(2, 30)); delayQueueManager.put(new DelayTask(3, 60)); }}2. Redis Key过期回调
修改redis.conf文件
# bind 127.0.0.1 -::1
protected-mode no
notify-keyspace-events Ex
[root@localhost redis-6.2.1]$ src/redis-server redis.conf 4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.4 com.example demo0401 0.0.1-SNAPSHOT demo0401 Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-maven-plugin RedisConfig.java
package com.example.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.listener.RedisMessageListenerContainer;/** * @author ChengJianSheng * @since 2021/4/2 */@Configurationpublic class RedisConfig { @Bean public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); return container; }}创建一个监听类
package com.example.listener;import org.springframework.data.redis.connection.Message;import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;import org.springframework.data.redis.listener.RedisMessageListenerContainer;import org.springframework.stereotype.Component;/** * @author ChengJianSheng * @since 2021/4/2 */@Componentpublic class MyRedisKeyExpirationListener extends KeyExpirationEventMessageListener { public MyRedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Override public void onMessage(Message message, byte[] pattern) { String expiredKey = message.toString(); System.out.println("监听到Key: " + expiredKey + " 已过期"); }}看完了这篇文章,相信你对"如何实现Java中的延迟队列"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
延迟
队列
任务
篇文章
监听
完了
常见
文件
方法
更多
知识
行业
资讯
资讯频道
频道
管理
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网新科技
山东特亿宝互联网科技有限公司
广州百单互联网科技有限公司
互联网与科技金融数据
腾讯阿里互联网科技
没上市的科技互联网公司
广州互联网络科技有限公司
互联网科技的未来发展
深圳期待互联网科技
人人互联网科技是培训
重庆科技学院互联网
蓝色互联网科技
中盈科技互联网信息有限公司
中国互联网十大科技股排名
翼展科技 首家互联网医院
阿里互联网科技企业
威龙国际互联网科技公司
华中科技大学互联网的牛人
滨湖区互联网智能科技产品有哪些
2021世界互联网领先科技成果发布
互联网科技官网
互联网高科技企业
镁科技互联网资讯平台
福州新华互联网科技学校 知乎
南平创想时代互联网科技有限公司
中国科技创新与世界互联网大会
卓翼科技产业互联网合作
互联网科技新闻
互联网科技手抄报图片
每日互联网科技新闻