这里简单的说一下延时队列的实现方式和应用场景。
实现方式
JDK自带的DelayQueue、Redis的Zset集合、Spring框架的Quartz任务调度器、以及RabbitMq的RabbitMQ TTL和DXL、Netty的HashedWheelTimer都可以实现延时任务。
应用场景
订单超时未支付、取消订单、恢复库存、短信延时发送、定时任务以及服务端定时消息推送等
下面通过一个案例介绍如何使用Redis+Redisson+注解的方式来实现延时队列和定时任务,具体代码如下。
1.定义一个接口类
@FunctionalInterface
public interface RedisDelayedQueue<M> {
void convertAndSend(Message<M> data,Long time,TimeUnit type);
default void convertAndSend(Message<M> data){}
default void convertAndSend(Message<M> data,String time){}
default void remove(Message<M> data){}
}
2.定义注解
@Documented
@Retention(RUNTIME)
@Target(METHOD)
@Inherited
public @interface RedisListener {
public enum TYPE{TIMER,QUEUE}
String[] value() default {};
TYPE type() default T