疯狂的狮子li
2022-08-31 bd338dd9341a3473a2a504d55c00796dd7b98f5a
update 重构 QueueUtils 抽取通用方法 统一使用 适配优先队列新用法
已修改5个文件
已删除1个文件
126 ■■■■ 文件已修改
pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/QueueUtils.java 79 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/BoundedQueueController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemo.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemoComparator.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityQueueController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -31,7 +31,7 @@
        <hutool.version>5.8.5</hutool.version>
        <okhttp.version>4.10.0</okhttp.version>
        <spring-boot-admin.version>2.7.4</spring-boot-admin.version>
        <redisson.version>3.17.5</redisson.version>
        <redisson.version>3.17.6</redisson.version>
        <lock4j.version>2.2.2</lock4j.version>
        <dynamic-ds.version>3.5.1</dynamic-ds.version>
        <tlog.version>1.4.3</tlog.version>
ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/QueueUtils.java
@@ -42,7 +42,7 @@
    }
    /**
     * èŽ·å–ä¸€ä¸ªæ™®é€šé˜Ÿåˆ—æ•°æ® æ²¡æœ‰æ•°æ®è¿”回 null
     * é€šç”¨èŽ·å–ä¸€ä¸ªé˜Ÿåˆ—æ•°æ® æ²¡æœ‰æ•°æ®è¿”回 null(不支持延迟队列)
     *
     * @param queueName é˜Ÿåˆ—名
     */
@@ -52,11 +52,19 @@
    }
    /**
     * åˆ é™¤æ™®é€šé˜Ÿåˆ—数据
     * é€šç”¨åˆ é™¤é˜Ÿåˆ—数据(不支持延迟队列)
     */
    public static <T> boolean removeQueueObject(String queueName, T data) {
        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
        return queue.remove(data);
    }
    /**
     * é€šç”¨é”€æ¯é˜Ÿåˆ— æ‰€æœ‰é˜»å¡žç›‘听 æŠ¥é”™(不支持延迟队列)
     */
    public static <T> boolean destroyQueue(String queueName) {
        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
        return queue.delete();
    }
    /**
@@ -118,23 +126,12 @@
     *
     * @param queueName  é˜Ÿåˆ—名
     * @param comparator æ¯”较器
     */
    public static <T> boolean trySetPriorityQueueComparator(String queueName, Comparator<T> comparator) {
        RPriorityBlockingQueue<T> priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName);
        return priorityBlockingQueue.trySetComparator(comparator);
    }
    /**
     * å°è¯•设置 ä¼˜å…ˆé˜Ÿåˆ—比较器 ç”¨äºŽæŽ’序优先级
     *
     * @param queueName  é˜Ÿåˆ—名
     * @param comparator æ¯”较器
     * @param destroy    å·²å­˜åœ¨æ˜¯å¦é”€æ¯
     */
    public static <T> boolean trySetPriorityQueueComparator(String queueName, Comparator<T> comparator, boolean destroy) {
        RPriorityBlockingQueue<T> priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName);
        if (priorityBlockingQueue.isExists() && destroy) {
            destroyPriorityQueueObject(queueName);
            destroyQueue(queueName);
        }
        return priorityBlockingQueue.trySetComparator(comparator);
    }
@@ -148,32 +145,6 @@
    public static <T> boolean addPriorityQueueObject(String queueName, T data) {
        RPriorityBlockingQueue<T> priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName);
        return priorityBlockingQueue.offer(data);
    }
    /**
     * èŽ·å–ä¸€ä¸ªä¼˜å…ˆé˜Ÿåˆ—æ•°æ® æ²¡æœ‰æ•°æ®è¿”回 null
     *
     * @param queueName é˜Ÿåˆ—名
     */
    public static <T> T getPriorityQueueObject(String queueName) {
        RPriorityBlockingQueue<T> priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName);
        return priorityBlockingQueue.poll();
    }
    /**
     * åˆ é™¤ä¼˜å…ˆé˜Ÿåˆ—数据
     */
    public static <T> boolean removePriorityQueueObject(String queueName, T data) {
        RPriorityBlockingQueue<T> 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 static <T> boolean trySetBoundedQueueCapacity(String queueName, int capacity, boolean destroy) {
        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
        if (boundedBlockingQueue.isExists() && destroy) {
            destroyBoundedQueueObject(queueName);
            destroyQueue(queueName);
        }
        return boundedBlockingQueue.trySetCapacity(capacity);
    }
@@ -212,32 +183,6 @@
    public static <T> boolean addBoundedQueueObject(String queueName, T data) {
        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
        return boundedBlockingQueue.offer(data);
    }
    /**
     * èŽ·å–ä¸€ä¸ªæœ‰ç•Œé˜Ÿåˆ—æ•°æ® æ²¡æœ‰æ•°æ®è¿”回 null
     *
     * @param queueName é˜Ÿåˆ—名
     */
    public static <T> T getBoundedQueueObject(String queueName) {
        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
        return boundedBlockingQueue.poll();
    }
    /**
     * åˆ é™¤æœ‰ç•Œé˜Ÿåˆ—数据
     */
    public static <T> boolean removeBoundedQueueObject(String queueName, T data) {
        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
        return boundedBlockingQueue.remove(data);
    }
    /**
     * é”€æ¯æœ‰ç•Œé˜Ÿåˆ—
     */
    public static boolean destroyBoundedQueueObject(String queueName) {
        RBoundedBlockingQueue<?> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
        return boundedBlockingQueue.delete();
    }
    /**
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/BoundedQueueController.java
@@ -35,7 +35,7 @@
    @GetMapping("/add")
    public R<Void> 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 @@
    @GetMapping("/remove")
    public R<Void> 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 R<Void> get(String queueName) {
        String data;
        do {
            data = QueueUtils.getBoundedQueueObject(queueName);
            data = QueueUtils.getQueueObject(queueName);
            log.info("通道: {} , èŽ·å–æ•°æ®: {}", queueName, data);
        } while (data != null);
        return R.ok("操作成功");
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemo.java
@@ -2,6 +2,7 @@
import lombok.Data;
import lombok.NoArgsConstructor;
import org.jetbrains.annotations.NotNull;
/**
 * å®žä½“ç±» æ³¨æ„ä¸å…è®¸ä½¿ç”¨å†…部类 å¦åˆ™ä¼šæ‰¾ä¸åˆ°ç±»
@@ -11,7 +12,12 @@
 */
@Data
@NoArgsConstructor
public class PriorityDemo {
public class PriorityDemo implements Comparable<PriorityDemo> {
    private String name;
    private Integer orderNum;
    @Override
    public int compareTo(@NotNull PriorityDemo other) {
        return Integer.compare(getOrderNum(), other.getOrderNum());
    }
}
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityDemoComparator.java
ÎļþÒÑɾ³ý
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityQueueController.java
@@ -34,16 +34,9 @@
    @GetMapping("/add")
    public R<Void> 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 @@
        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 R<Void> get(String queueName) {
        PriorityDemo data;
        do {
            data = QueueUtils.getPriorityQueueObject(queueName);
            data = QueueUtils.getQueueObject(queueName);
            log.info("通道: {} , èŽ·å–æ•°æ®: {}", queueName, data);
        } while (data != null);
        return R.ok("操作成功");