赞
踩
我们在日常开发中经常会遇到例如延时关闭订单这类任务,今天我么遇到的问题和延迟订单类似,就是在一条信息发布后,在规定的时间内没有人回复,则需要将该条留言关闭隐藏!其实,和订单关闭问题是一致的!
接下来我们就会通过Redission的RDelayedQueue(延迟队列)来实现我们的消息关闭!
使用过程其实很简单:
- <dependency>
- <groupId>org.redisson</groupId>
- <artifactId>redisson</artifactId>
- <version>3.12.0</version>
- </dependency>
配置类RedissonConfig 通过配置类RedissonConfig来配置我们的Bean——RedissonClient, 连接Redis地址、端口、密码等。
需要注意的是这里面如果密码为null的时候不需要显示的配置,具体代码如下所示:
- @Configuration
- public class RedissonConfig {
-
- @Value("${spring.redis.host}")
- private String host;
- @Value("${spring.redis.port}")
- private int port;
- @Value("${spring.redis.database}")
- private int database;
- @Value("${spring.redis.password}")
- private String password;
-
- @Bean
- public RedissonClient redissonClient() {
- Config config = new Config();
- SingleServerConfig singleServerConfig = config.useSingleServer()
- .setAddress("redis://" + host + ":" + port)
- .setDatabase(database);
- if (!StringUtils.isEmpty(password)) {
- singleServerConfig.setPassword(password);
- }
-
- return Redisson.create(config);
- }
- }

我们的定时任务工具类RedisDelayQueueUtil
核心代码如下:
- RBlockingDeque<Object> blockingDeque = redissonClient.getBlockingDeque(queueCode);
- RDelayedQueue<Object> delayedQueue = redissonClient.getDelayedQueue(blockingDeque);
- delayedQueue.offer(value, delay, timeUnit);
获取到了队列标记后,完成队列定义,最后将value按照delay定义的时长,timeUnit作为时长单位标识发送出去。
这样一个最基本的延迟任务就完成了!
4.获取延迟任务消息
具体核心代码如下:
- RBlockingDeque<Map> blockingDeque = redissonClient.getBlockingDeque(queueCode);
- T value = (T) blockingDeque.take();
代码中拿到queueCode队列后,获取到消息主体Value,然后我们在完成自己的业务逻辑即可
到这,我们的延迟任务核心功能就完成了,欢迎大家留言交流,也欢迎大家关注我的公号《coder练习生》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。