Redssion通过RDelayedQueue实现延迟任务

问题背景

我们在日常开发中经常会遇到例如延时关闭订单这类任务,今天我么遇到的问题和延迟订单类似,就是在一条信息发布后,在规定的时间内没有人回复,则需要将该条留言关闭隐藏!其实,和订单关闭问题是一致的!

接下来我们就会通过Redission的RDelayedQueue(延迟队列)来实现我们的消息关闭!

使用步骤

使用过程其实很简单:

  1. 将消息放到RDelayedQueue(延迟队列)中;
  2. 从RDelayedQueue(延迟队列)中取出消息进行消费

具体实现

  1. 我这里使用的是Springboot的maven项目,打开pom文件,添加相关依赖
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.12.0</version>
</dependency>
  1. 配置类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);
    }
}
  1. 我们的定时任务工具类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练习生》

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ybb_ymm

你的鼓励会是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值