瀏覽代碼

新增redis消息队列

wangliang 4 年之前
父節點
當前提交
23a754aad5

+ 6 - 1
distributed-print/src/main/java/com/qmth/distributed/print/config/RedisMessageListener.java

@@ -41,16 +41,21 @@ public class RedisMessageListener implements MessageListener {
                 for (; integer.get() < mqDto.getReconsume(); integer.incrementAndGet()) {
                     log.info("reconsume:{}", integer.get());
                     if (Objects.nonNull(mqDto.getAck()) && mqDto.getAck().intValue() != SystemConstant.STANDARD_ACK_TYPE
+                            && Objects.nonNull(redisUtil.get(SystemConstant.MQ_TOPIC_BUFFER_LIST, mqDto.getId()))
                             && redisUtil.lock(SystemConstant.REDIS_LOCK_MQ_PREFIX + mqDto.getId(),
                             SystemConstant.REDIS_LOCK_MQ_TIME_OUT)) {
                         //通道
                         String topic = new String(message.getChannel(), SystemConstant.CHARSET_NAME);
                         mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
                         log.info("mqDto:{},topic:{}", JacksonUtil.parseJson(mqDto), JacksonUtil.parseJson(topic));
+                        redisUtil.delete(SystemConstant.MQ_TOPIC_BUFFER_LIST, mqDto.getId());
                         break;
                     } else {
+                        if (Objects.isNull(redisUtil.get(SystemConstant.MQ_TOPIC_BUFFER_LIST, mqDto.getId()))) {
+                            break;
+                        }
                         mqDto.setAck(SystemConstant.REDELIVERED_ACK_TYPE);
-                        Thread.sleep(Duration.ofSeconds(1L).toMillis() * (integer.get() == 0 ? 1 : integer.get()));
+                        Thread.sleep(Duration.ofSeconds(SystemConstant.REDIS_MQ_MAX_RECONSUME).toMillis() * (integer.get() == 0 ? 1 : integer.get()));
                     }
                 }
             }

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -122,6 +122,7 @@ public class SystemConstant {
      */
     public static final String REDIS_LOCK_MQ_PREFIX = "redis:lock:mq:";
     public static final int REDIS_MQ_MAX_RECONSUME = 3;
+    public static final String MQ_TOPIC_BUFFER_LIST = "mq:topic:buffer:list";
 
     /**
      * redis lock

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/RedisUtil.java

@@ -273,5 +273,6 @@ public class RedisUtil {
     public void sendMessage(String topic, MqDto mqDto) {
         mqDto.setAck(SystemConstant.DELIVERED_ACK_TYPE);
         redisTemplate.convertAndSend(topic, JacksonUtil.parseJson(mqDto));
+        this.set(SystemConstant.MQ_TOPIC_BUFFER_LIST, mqDto.getId(), mqDto);
     }
 }