Java实现
public class RedissonTest {
private static RedissonClient redissonClient;
static {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
redissonClient = Redisson.create(config);
}
public static void main(String[] args) throws InterruptedException {
// redisson 延迟队列
// Redisson的延时队列是对另一个队列的再包装,使用时要先将延时消息添加到延时队列中,
// 当延时队列中的消息达到设定的延时时间后,该延时消息才会进行进入到被包装队列中,因此,我们只需要对被包装队列进行监听即可。
RBlockingQueue<String> blockingFairQueue = redissonClient.getBlockingQueue("my-test");
RDelayedQueue<String> delayedQueue = redissonClient.getDelayedQueue(blockingFairQueue);
String message = "hello charles" + LocalDateTime.now();
// 60秒钟以后将消息发送到指定队列
delayedQueue.offer(message, 60, TimeUnit.SECONDS);
RBlockingQueue<String> outQueue = redissonClient.getBlockingQueue("my-test");
String orderInfo2 = outQueue.take();
System.out.println("订单生成时间" + orderInfo2);
System.out.println("订单关闭时间" + LocalDateTime.now());
// 在该对象不再需要的情况下,应该主动销毁。仅在相关的Redisson对象也需要关闭的时候可以不用主动销毁
delayedQueue.destroy();
return orderInfo2;
}
实现原理
redisson
基于RBlockingQueue
目标队列在进行消费,RDelayedQueue
就是会把过期的消息放入到我们的目标队列中,
redisson
只要从RBlockingQueue
队列中取数据即可。