| 
					
				 | 
			
			
				@@ -6,9 +6,10 @@ import com.xunmei.common.core.utils.JacksonUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.redis.enums.RedisDelayQueueEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.system.api.util.LogUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.DisposableBean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.InitializingBean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Qualifier; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.boot.CommandLineRunner; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Component; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -16,39 +17,48 @@ import java.util.concurrent.TimeUnit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-public class RedisDelayQueueRunner implements CommandLineRunner { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class RedisDelayQueueRunner implements  Runnable, InitializingBean, DisposableBean  { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Thread thread; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Qualifier(ThreadPoolConfig.HOST_EXECUTOR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ThreadPoolTaskExecutor ptask; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void run(String... args) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Thread thread = new Thread(() -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            while (!Thread.currentThread().isInterrupted()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    RedisDelayQueueEnum[] queueEnums = RedisDelayQueueEnum.values(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    for (RedisDelayQueueEnum queueEnum : queueEnums) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        Object value = RedisDelayedQueueUtil.getDelayQueueData(queueEnum.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (value != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            LogUtils.WS_MSG_RETRY_LOG.info("{} 延迟队列有数据,开始处理,消息内容:{}", queueEnum.getName(), JacksonUtils.toJSONString(value)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            RedisDelayQueueHandle<Object> redisDelayQueueHandle = (RedisDelayQueueHandle<Object>) SpringUtil.getBean(queueEnum.getBeanId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            ptask.execute(() -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                redisDelayQueueHandle.execute(value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void run() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        while (!Thread.currentThread().isInterrupted()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                RedisDelayQueueEnum[] queueEnums = RedisDelayQueueEnum.values(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (RedisDelayQueueEnum queueEnum : queueEnums) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Object value = RedisDelayedQueueUtil.getDelayQueueData(queueEnum.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (value != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        LogUtils.WS_MSG_RETRY_LOG.info("{} 延迟队列有数据,开始处理,消息内容:{}", queueEnum.getName(), JacksonUtils.toJSONString(value)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        RedisDelayQueueHandle<Object> redisDelayQueueHandle = (RedisDelayQueueHandle<Object>) SpringUtil.getBean(queueEnum.getBeanId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ptask.execute(() -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            redisDelayQueueHandle.execute(value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    TimeUnit.MILLISECONDS.sleep(500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } catch (InterruptedException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    LogUtils.WS_MSG_RETRY_LOG.error("(Redission延迟队列监测异常中断) {}", e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                TimeUnit.MILLISECONDS.sleep(500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } catch (InterruptedException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                LogUtils.WS_MSG_RETRY_LOG.error("(Redission延迟队列监测异常中断) {}", e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        thread.setDaemon(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        thread.setName("websocketMsg-delay—retry"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        thread.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void afterPropertiesSet() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.thread = new Thread(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.thread.setName("websocketMsg-delay—retry" + thread.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.thread.setDaemon(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         LogUtils.WS_MSG_RETRY_LOG.info("Redission延迟队列监测启动!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.thread.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void destroy() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.thread.interrupt(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |