Redis延时队列
- 引入依赖
<dependency>
<groupId>org.ywb</groupId>
<artifactId>redis-delay-queue</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
-
投递消息
引入
RedisDelayQueue
@Resource
private RedisDelayQueue redisDelayQueue;
void test(){
redisDelayQueue.delay("topicName",task,20L,timeUnit);
}
api 介绍
delay有很多重载方法,我们需要明确下面几个概念
- 投递的topic
- 具体投递的任务 Obj
- 希望多久后获得到这个任务
- 时间单位
-
消费消息
实现
HandlerTask
接口,并标注消费的topic
handler方法入参是你当时投递到延迟队列中的json串,需要你自己手动反序列化一下
@DelayQueueListener(listen = "topic")
public class TaskHandler implements HandlerTask {
@Override
public void handler(String task) {
// todo
}
}
[注] 注解中listener属性支持Spring SPEL表达式
- 期望获取时间参数,可以通过直接设置延迟任务获取时间
- 增加
Supplier
,Function
函数式接口用于制定延迟任务