From bd338dd9341a3473a2a504d55c00796dd7b98f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 31 Aug 2022 19:19:31 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E9=87=8D=E6=9E=84=20QueueUtils=20?= =?UTF-8?q?=E6=8A=BD=E5=8F=96=E9=80=9A=E7=94=A8=E6=96=B9=E6=B3=95=20?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E4=BD=BF=E7=94=A8=20=E9=80=82=E9=85=8D?= =?UTF-8?q?=E4=BC=98=E5=85=88=E9=98=9F=E5=88=97=E6=96=B0=E7=94=A8=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../ruoyi/common/utils/redis/QueueUtils.java | 79 +++---------------- .../queue/BoundedQueueController.java | 6 +- .../demo/controller/queue/PriorityDemo.java | 8 +- .../queue/PriorityDemoComparator.java | 16 ---- .../queue/PriorityQueueController.java | 15 +--- 6 files changed, 27 insertions(+), 99 deletions(-) delete mode 100644 ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemoComparator.java diff --git a/pom.xml b/pom.xml index 9fb54fb6c..6933b9946 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ 5.8.5 4.10.0 2.7.4 - 3.17.5 + 3.17.6 2.2.2 3.5.1 1.4.3 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/QueueUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/QueueUtils.java index acfc021fe..b8fa30804 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/QueueUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/QueueUtils.java @@ -42,7 +42,7 @@ public class QueueUtils { } /** - * 获取一个普通队列数据 没有数据返回 null + * 通用获取一个队列数据 没有数据返回 null(不支持延迟队列) * * @param queueName 队列名 */ @@ -52,13 +52,21 @@ public class QueueUtils { } /** - * 删除普通队列数据 + * 通用删除队列数据(不支持延迟队列) */ public static boolean removeQueueObject(String queueName, T data) { RBlockingQueue queue = CLIENT.getBlockingQueue(queueName); return queue.remove(data); } + /** + * 通用销毁队列 所有阻塞监听 报错(不支持延迟队列) + */ + public static boolean destroyQueue(String queueName) { + RBlockingQueue queue = CLIENT.getBlockingQueue(queueName); + return queue.delete(); + } + /** * 添加延迟队列数据 默认毫秒 * @@ -113,17 +121,6 @@ public class QueueUtils { delayedQueue.destroy(); } - /** - * 尝试设置 优先队列比较器 用于排序优先级 - * - * @param queueName 队列名 - * @param comparator 比较器 - */ - public static boolean trySetPriorityQueueComparator(String queueName, Comparator comparator) { - RPriorityBlockingQueue priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName); - return priorityBlockingQueue.trySetComparator(comparator); - } - /** * 尝试设置 优先队列比较器 用于排序优先级 * @@ -134,7 +131,7 @@ public class QueueUtils { public static boolean trySetPriorityQueueComparator(String queueName, Comparator comparator, boolean destroy) { RPriorityBlockingQueue priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName); if (priorityBlockingQueue.isExists() && destroy) { - destroyPriorityQueueObject(queueName); + destroyQueue(queueName); } return priorityBlockingQueue.trySetComparator(comparator); } @@ -150,32 +147,6 @@ public class QueueUtils { return priorityBlockingQueue.offer(data); } - /** - * 获取一个优先队列数据 没有数据返回 null - * - * @param queueName 队列名 - */ - public static T getPriorityQueueObject(String queueName) { - RPriorityBlockingQueue priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName); - return priorityBlockingQueue.poll(); - } - - /** - * 删除优先队列数据 - */ - public static boolean removePriorityQueueObject(String queueName, T data) { - RPriorityBlockingQueue priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName); - return priorityBlockingQueue.remove(data); - } - - /** - * 销毁优先队列 - */ - public static boolean destroyPriorityQueueObject(String queueName) { - RPriorityBlockingQueue priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName); - return priorityBlockingQueue.delete(); - } - /** * 尝试设置 有界队列 容量 用于限制数量 * @@ -197,7 +168,7 @@ public class QueueUtils { public static boolean trySetBoundedQueueCapacity(String queueName, int capacity, boolean destroy) { RBoundedBlockingQueue boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName); if (boundedBlockingQueue.isExists() && destroy) { - destroyBoundedQueueObject(queueName); + destroyQueue(queueName); } return boundedBlockingQueue.trySetCapacity(capacity); } @@ -214,32 +185,6 @@ public class QueueUtils { return boundedBlockingQueue.offer(data); } - /** - * 获取一个有界队列数据 没有数据返回 null - * - * @param queueName 队列名 - */ - public static T getBoundedQueueObject(String queueName) { - RBoundedBlockingQueue boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName); - return boundedBlockingQueue.poll(); - } - - /** - * 删除有界队列数据 - */ - public static boolean removeBoundedQueueObject(String queueName, T data) { - RBoundedBlockingQueue boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName); - return boundedBlockingQueue.remove(data); - } - - /** - * 销毁有界队列 - */ - public static boolean destroyBoundedQueueObject(String queueName) { - RBoundedBlockingQueue boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName); - return boundedBlockingQueue.delete(); - } - /** * 订阅阻塞队列(可订阅所有实现类 例如: 延迟 优先 有界 等) */ diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/BoundedQueueController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/BoundedQueueController.java index 50c361b1c..968a4193f 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/BoundedQueueController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/BoundedQueueController.java @@ -35,7 +35,7 @@ public class BoundedQueueController { @GetMapping("/add") public R add(String queueName, int capacity) { // 用完了一定要销毁 否则会一直存在 - boolean b = QueueUtils.destroyBoundedQueueObject(queueName); + boolean b = QueueUtils.destroyQueue(queueName); log.info("通道: {} , 删除: {}", queueName, b); // 初始化设置一次即可 if (QueueUtils.trySetBoundedQueueCapacity(queueName, capacity)) { @@ -64,7 +64,7 @@ public class BoundedQueueController { @GetMapping("/remove") public R remove(String queueName) { String data = "data-" + 5; - if (QueueUtils.removeBoundedQueueObject(queueName, data)) { + if (QueueUtils.removeQueueObject(queueName, data)) { log.info("通道: {} , 删除数据: {}", queueName, data); } else { return R.fail("操作失败"); @@ -81,7 +81,7 @@ public class BoundedQueueController { public R get(String queueName) { String data; do { - data = QueueUtils.getBoundedQueueObject(queueName); + data = QueueUtils.getQueueObject(queueName); log.info("通道: {} , 获取数据: {}", queueName, data); } while (data != null); return R.ok("操作成功"); diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemo.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemo.java index 80f1b1155..320a640da 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemo.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemo.java @@ -2,6 +2,7 @@ package com.ruoyi.demo.controller.queue; import lombok.Data; import lombok.NoArgsConstructor; +import org.jetbrains.annotations.NotNull; /** * 实体类 注意不允许使用内部类 否则会找不到类 @@ -11,7 +12,12 @@ import lombok.NoArgsConstructor; */ @Data @NoArgsConstructor -public class PriorityDemo { +public class PriorityDemo implements Comparable { private String name; private Integer orderNum; + + @Override + public int compareTo(@NotNull PriorityDemo other) { + return Integer.compare(getOrderNum(), other.getOrderNum()); + } } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemoComparator.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemoComparator.java deleted file mode 100644 index f72e6950d..000000000 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemoComparator.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.ruoyi.demo.controller.queue; - -import java.util.Comparator; - -/** - * 比较器 注意不允许使用 内部类或匿名类或lambda表达式 会找不到类 - * - * @author Lion Li - * @version 3.6.0 - */ -public class PriorityDemoComparator implements Comparator { - @Override - public int compare(PriorityDemo pd1, PriorityDemo pd2) { - return Integer.compare(pd1.getOrderNum(), pd2.getOrderNum()); - } -} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityQueueController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityQueueController.java index ba6c340b6..4a60232c7 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityQueueController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityQueueController.java @@ -34,16 +34,9 @@ public class PriorityQueueController { @GetMapping("/add") public R add(String queueName) { // 用完了一定要销毁 否则会一直存在 - boolean b = QueueUtils.destroyPriorityQueueObject(queueName); + boolean b = QueueUtils.destroyQueue(queueName); log.info("通道: {} , 删除: {}", queueName, b); - // 初始化设置一次即可 此处注意 不允许用内部类或匿名类 - boolean flag = QueueUtils.trySetPriorityQueueComparator(queueName, new PriorityDemoComparator()); - if (flag) { - log.info("通道: {} , 设置比较器成功", queueName); - } else { - log.info("通道: {} , 设置比较器失败", queueName); - return R.fail("操作失败"); - } + for (int i = 0; i < 10; i++) { int randomNum = RandomUtil.randomInt(10); PriorityDemo data = new PriorityDemo(); @@ -70,7 +63,7 @@ public class PriorityQueueController { PriorityDemo data = new PriorityDemo(); data.setName(name); data.setOrderNum(orderNum); - if (QueueUtils.removePriorityQueueObject(queueName, data)) { + if (QueueUtils.removeQueueObject(queueName, data)) { log.info("通道: {} , 删除数据: {}", queueName, data); } else { return R.fail("操作失败"); @@ -87,7 +80,7 @@ public class PriorityQueueController { public R get(String queueName) { PriorityDemo data; do { - data = QueueUtils.getPriorityQueueObject(queueName); + data = QueueUtils.getQueueObject(queueName); log.info("通道: {} , 获取数据: {}", queueName, data); } while (data != null); return R.ok("操作成功");