![JAR search and dependency download from the Maven repository](/logo.png)
com.spring.boxes.redis.queue.RedisQueueTemplate Maven / Gradle / Ivy
The newest version!
package com.spring.boxes.redis.queue;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.redisson.api.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
/**
* 分布式队列工具
* 轻量级队列 重量级数据量 请使用 MQ
* 要求 redis 5.X 以上
*
* @version 3.6.0 新增
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RedisQueueTemplate {
private RedissonClient redissonClient;
/**
* 添加普通队列数据
*
* @param queueName 队列名
* @param data 数据
*/
public boolean addQueueObject(String queueName, T data) {
RBlockingQueue queue = this.redissonClient.getBlockingQueue(queueName);
return queue.offer(data);
}
/**
* 通用获取一个队列数据 没有数据返回 null(不支持延迟队列)
*
* @param queueName 队列名
*/
public T getQueueObject(String queueName) {
RBlockingQueue queue = this.redissonClient.getBlockingQueue(queueName);
return queue.poll();
}
/**
* 通用删除队列数据(不支持延迟队列)
*/
public boolean removeQueueObject(String queueName, T data) {
RBlockingQueue queue = this.redissonClient.getBlockingQueue(queueName);
return queue.remove(data);
}
/**
* 通用销毁队列 所有阻塞监听 报错(不支持延迟队列)
*/
public boolean destroyQueue(String queueName) {
RBlockingQueue queue = this.redissonClient.getBlockingQueue(queueName);
return queue.delete();
}
/**
* 添加延迟队列数据 默认毫秒
*
* @param queueName 队列名
* @param data 数据
* @param time 延迟时间
*/
public void addDelayedQueueObject(String queueName, T data, long time) {
addDelayedQueueObject(queueName, data, time, TimeUnit.MILLISECONDS);
}
/**
* 添加延迟队列数据
*
* @param queueName 队列名
* @param data 数据
* @param time 延迟时间
* @param timeUnit 单位
*/
public void addDelayedQueueObject(String queueName, T data, long time, TimeUnit timeUnit) {
RBlockingQueue queue = this.redissonClient.getBlockingQueue(queueName);
RDelayedQueue delayedQueue = this.redissonClient.getDelayedQueue(queue);
delayedQueue.offer(data, time, timeUnit);
}
/**
* 获取一个延迟队列数据 没有数据返回 null
*
* @param queueName 队列名
*/
public T getDelayedQueueObject(String queueName) {
RBlockingQueue queue = this.redissonClient.getBlockingQueue(queueName);
RDelayedQueue delayedQueue = this.redissonClient.getDelayedQueue(queue);
return delayedQueue.poll();
}
/**
* 删除延迟队列数据
*/
public boolean removeDelayedQueueObject(String queueName, T data) {
RBlockingQueue queue = this.redissonClient.getBlockingQueue(queueName);
RDelayedQueue delayedQueue = this.redissonClient.getDelayedQueue(queue);
return delayedQueue.remove(data);
}
/**
* 销毁延迟队列 所有阻塞监听 报错
*/
public void destroyDelayedQueue(String queueName) {
RBlockingQueue queue = this.redissonClient.getBlockingQueue(queueName);
RDelayedQueue delayedQueue = this.redissonClient.getDelayedQueue(queue);
delayedQueue.destroy();
}
/**
* 添加优先队列数据
*
* @param queueName 队列名
* @param data 数据
*/
public boolean addPriorityQueueObject(String queueName, T data) {
RPriorityBlockingQueue priorityBlockingQueue = this.redissonClient.getPriorityBlockingQueue(queueName);
return priorityBlockingQueue.offer(data);
}
/**
* 优先队列获取一个队列数据 没有数据返回 null(不支持延迟队列)
*
* @param queueName 队列名
*/
public T getPriorityQueueObject(String queueName) {
RPriorityBlockingQueue queue = this.redissonClient.getPriorityBlockingQueue(queueName);
return queue.poll();
}
/**
* 优先队列删除队列数据(不支持延迟队列)
*/
public boolean removePriorityQueueObject(String queueName, T data) {
RPriorityBlockingQueue queue = this.redissonClient.getPriorityBlockingQueue(queueName);
return queue.remove(data);
}
/**
* 优先队列销毁队列 所有阻塞监听 报错(不支持延迟队列)
*/
public boolean destroyPriorityQueue(String queueName) {
RPriorityBlockingQueue queue = this.redissonClient.getPriorityBlockingQueue(queueName);
return queue.delete();
}
/**
* 尝试设置 有界队列 容量 用于限制数量
*
* @param queueName 队列名
* @param capacity 容量
*/
public boolean trySetBoundedQueueCapacity(String queueName, int capacity) {
RBoundedBlockingQueue boundedBlockingQueue = this.redissonClient.getBoundedBlockingQueue(queueName);
return boundedBlockingQueue.trySetCapacity(capacity);
}
/**
* 尝试设置 有界队列 容量 用于限制数量
*
* @param queueName 队列名
* @param capacity 容量
* @param destroy 已存在是否销毁
*/
public boolean trySetBoundedQueueCapacity(String queueName, int capacity, boolean destroy) {
RBoundedBlockingQueue boundedBlockingQueue = this.redissonClient.getBoundedBlockingQueue(queueName);
if (boundedBlockingQueue.isExists() && destroy) {
destroyQueue(queueName);
}
return boundedBlockingQueue.trySetCapacity(capacity);
}
/**
* 添加有界队列数据
*
* @param queueName 队列名
* @param data 数据
* @return 添加成功 true 已达到界限 false
*/
public boolean addBoundedQueueObject(String queueName, T data) {
RBoundedBlockingQueue boundedBlockingQueue = this.redissonClient.getBoundedBlockingQueue(queueName);
return boundedBlockingQueue.offer(data);
}
/**
* 有界队列获取一个队列数据 没有数据返回 null(不支持延迟队列)
*
* @param queueName 队列名
*/
public T getBoundedQueueObject(String queueName) {
RBoundedBlockingQueue queue = this.redissonClient.getBoundedBlockingQueue(queueName);
return queue.poll();
}
/**
* 有界队列删除队列数据(不支持延迟队列)
*/
public boolean removeBoundedQueueObject(String queueName, T data) {
RBoundedBlockingQueue queue = this.redissonClient.getBoundedBlockingQueue(queueName);
return queue.remove(data);
}
/**
* 有界队列销毁队列 所有阻塞监听 报错(不支持延迟队列)
*/
public boolean destroyBoundedQueue(String queueName) {
RBoundedBlockingQueue queue = this.redissonClient.getBoundedBlockingQueue(queueName);
return queue.delete();
}
/**
* 订阅阻塞队列(可订阅所有实现类 例如: 延迟 优先 有界 等)
*/
public void subscribeBlockingQueue(String queueName, Consumer consumer, boolean isDelayed) {
RBlockingQueue queue = this.redissonClient.getBlockingQueue(queueName);
if (isDelayed) {
// 订阅延迟队列
this.redissonClient.getDelayedQueue(queue);
}
queue.subscribeOnElements(consumer);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy