Redisson是一个在Redis的基础上实现的工具集,提供了Redis最简单最快捷的方法常用于延迟任务和分布式锁。
延迟任务的实现
延迟任务的实现方案有很多,常见的有4类:DelayQueue、Redisson、MQ、时间轮。DelayQueue与时间轮不依赖第三方服务,但只能用于单机使用。Redisson和MQ支持分布式锁,但缺点是依赖于第三方软件。
Redisson延迟任务的实现步骤
1.添加依赖redisson-spring-boot-starter.
2.添加配置:所需微服务中的application.yml添加redis的配置,指名暗转redisson的服务器地址.
3.@Autowired注入RedissonClient对象
4.由于Redisson实现延迟队列主要是依靠Redis的Zset和List实现的,先进入到ZSet按照延迟时间顺序排序。在进入到List阻塞队列等待被消费。所以代码中要先使用redisssonClient.getBlockingDueue("队列名称"),Dueue为双开口队列,获取到List阻塞队列,
再根据List生成ZSet即redissonClient.getDelayQueue(放阻塞队列变量名)生成Zset delayedQueue
然后将消息放入到延迟队列中,指定延迟时间即可。delayedQueue.offer(方法参数传入的消息ID,方法参数传入的延迟时间,延迟时间单位).
上述步骤已创建好延迟队列,下面等时间到了按步骤执行即可完成
5.在需要延迟队列中的消息处,从延迟队列中获取到消息即可,redisssonClient.getBlockingDueue("队列名称")获取与上述同一个blockingQueue,然后调用poll方法获取。后续跟延迟任务的业务逻辑代码。