浏览代码

fix 修复 延迟队列在投递消息未到达时间的时候 服务死机导致重启收不到消息

疯狂的狮子Li 1 年之前
父节点
当前提交
9b0938e0d6

+ 5 - 1
ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/QueueUtils.java

@@ -224,8 +224,12 @@ public class QueueUtils {
     /**
      * 订阅阻塞队列(可订阅所有实现类 例如: 延迟 优先 有界 等)
      */
-    public static <T> void subscribeBlockingQueue(String queueName, Consumer<T> consumer) {
+    public static <T> void subscribeBlockingQueue(String queueName, Consumer<T> consumer, boolean isDelayed) {
         RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
+        if (isDelayed) {
+            // 订阅延迟队列
+            CLIENT.getDelayedQueue(queue);
+        }
         queue.subscribeOnElements(consumer);
     }
 

+ 3 - 1
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java

@@ -1,5 +1,6 @@
 package org.dromara.demo.controller.queue;
 
+import cn.dev33.satoken.annotation.SaIgnore;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.redis.utils.QueueUtils;
 import lombok.RequiredArgsConstructor;
@@ -22,6 +23,7 @@ import java.util.concurrent.TimeUnit;
  * @author Lion Li
  * @version 3.6.0
  */
+@SaIgnore
 @Slf4j
 @RequiredArgsConstructor
 @RestController
@@ -40,7 +42,7 @@ public class DelayedQueueController {
         QueueUtils.subscribeBlockingQueue(queueName, (String orderNum) -> {
             // 观察接收时间
             log.info("通道: {}, 收到数据: {}", queueName, orderNum);
-        });
+        }, true);
         return R.ok("操作成功");
     }