|
|
@@ -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();
|
|
|
}
|
|
|
+
|
|
|
}
|