Parcourir la source

定时WS链接状态检测代码提交

jingyuanchao il y a 10 mois
Parent
commit
65ba7433f4

+ 3 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteHostService.java

@@ -87,4 +87,7 @@ public interface RemoteHostService {
 
     @GetMapping("/deletedRetryMsg/{date}")
     AjaxResult deletedRetryMsg(@PathVariable("date") String date);
+
+    @GetMapping("/checkWsOnLine")
+    AjaxResult checkWsOnLine();
 }

+ 5 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteHostFallbackFactory.java

@@ -100,6 +100,11 @@ public class RemoteHostFallbackFactory implements FallbackFactory<RemoteHostServ
             public AjaxResult deletedRetryMsg(String date) {
                 return AjaxResult.error();
             }
+
+            @Override
+            public AjaxResult checkWsOnLine() {
+                return null;
+            }
         };
     }
 }

+ 2 - 2
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/north/controller/HostController.java

@@ -167,7 +167,7 @@ public class HostController {
     }
 
     @GetMapping("/getOnlineWs")
-    AjaxResult getOnlineWs() {
+    List<String>  getOnlineWs() {
         Set<String> set = WebSocketSessionHolder.getSessionsAll();
         List<String> list = new ArrayList<>();
         for (String token : set) {
@@ -176,7 +176,7 @@ public class HostController {
                 list.add(token);
             }
         }
-        return AjaxResult.success(list);
+        return list;
     }
 
 }

+ 2 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/server/mapper/IotServerInfoMapper.java

@@ -1,5 +1,6 @@
 package com.xunmei.host.server.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
 import com.xunmei.system.api.domain.SysOrg;
@@ -15,6 +16,7 @@ import java.util.Date;
  * @author jingYuanChao
  * @since 2024-07-08
  */
+@InterceptorIgnore(blockAttack = "true")
 public interface IotServerInfoMapper extends BaseMapper<IotServerInfo> {
 
 

+ 33 - 9
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/server/service/impl/IotServerInfoServiceImpl.java

@@ -1,12 +1,23 @@
 package com.xunmei.host.server.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.nacos.api.exception.NacosException;
+import com.alibaba.nacos.api.naming.NamingService;
+import com.alibaba.nacos.api.naming.pojo.Instance;
+import com.alibaba.nacos.client.naming.NacosNamingService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.Constants;
+import com.xunmei.common.core.constant.ServiceNameConstants;
 import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
 import com.xunmei.common.core.enums.iot.IotServerConnectStatus;
+import com.xunmei.common.core.utils.JacksonUtils;
 import com.xunmei.common.core.utils.uuid.UUID;
 import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.host.server.mapper.IotServerInfoMapper;
@@ -15,12 +26,17 @@ import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.util.LogUtils;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestClientException;
 
+import javax.annotation.PostConstruct;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -33,11 +49,16 @@ import java.util.concurrent.TimeUnit;
 @Service
 public class IotServerInfoServiceImpl extends ServiceImpl<IotServerInfoMapper, IotServerInfo> implements IotServerInfoService {
 
-/*    @Autowired
-    private NamingService namingService;
 
+    private NamingService namingService;
     @Autowired
-    private RestTemplate restTemplate;*/
+    private NacosDiscoveryProperties nacosDiscoveryProperties;
+
+
+    @PostConstruct
+    public void initNacos() throws NacosException {
+        namingService = new NacosNamingService(nacosDiscoveryProperties.getNacosProperties());
+    }
 
     @Override
     public IotServerInfo getToken(String registerCode) {
@@ -130,7 +151,7 @@ public class IotServerInfoServiceImpl extends ServiceImpl<IotServerInfoMapper, I
 
     @Override
     public void checkWsOnLine() {
-       /* List<Instance> instanceList = new ArrayList<>();
+        List<Instance> instanceList = new ArrayList<>();
         try {
             instanceList = namingService.getAllInstances(ServiceNameConstants.HOST);
         } catch (NacosException e) {
@@ -146,18 +167,21 @@ public class IotServerInfoServiceImpl extends ServiceImpl<IotServerInfoMapper, I
         } catch (RuntimeException e) {
             LogUtils.SOCKET_CONNECT_STATUS_CHECK.error("获取服务上WS链接状态时异常", e);
             throw new RuntimeException(e);
-        }*/
+        }
 
 
     }
 
-    /*private List<String> getOnlineWs(List<Instance> instanceList) throws RuntimeException {
+    private List<String> getOnlineWs(List<Instance> instanceList) throws RuntimeException {
         //多线程远程调用获取服务状态
         List<String> onlineWS = new ArrayList<>();
         for (Instance instance : instanceList) {
-            List<String> list = null;
+            List<String> list = new ArrayList<>();
             try {
-                list = restTemplate.getForObject(instance.getIp() + ":" + instance.getPort() + "/getOnlineWs", List.class);
+                final String s = HttpUtil.get(instance.getIp() + ":" + instance.getPort() + "/getOnlineWs");
+                if (ObjectUtil.isNotEmpty(s)) {
+                    list = JSON.parseArray(s, String.class);
+                }
                 LogUtils.SOCKET_CONNECT_STATUS_CHECK.info("获取当前系统在线的WS链接:{}", JacksonUtils.toJSONString(list));
             } catch (RestClientException e) {
                 throw new RuntimeException(e);
@@ -206,5 +230,5 @@ public class IotServerInfoServiceImpl extends ServiceImpl<IotServerInfoMapper, I
         wrapper.in(IotServerInfo::getIotCode, onlineIotCode);
         baseMapper.update(null, wrapper);
         LogUtils.SOCKET_CONNECT_STATUS_CHECK.info("修改在线的WS连接的检测时间:{}", JacksonUtils.toJSONString(onlineIotCode));
-    }*/
+    }
 }

+ 8 - 0
soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/HostTask.java

@@ -42,4 +42,12 @@ public class HostTask {
         AjaxResult result = hostService.deletedRetryMsg(DateUtil.format(dateTime, "yyyy-MM-dd"));
         log.info("删除三天之前的所有重试消息数据任务结束....,当前任务 id:{},结果:{}", id, JSON.toJSONString(result));
     }
+
+    public void checkWsOnLine() {
+        String id = UUID.fastUUID().toString();
+        final DateTime beginOfDay = DateUtil.beginOfDay(new Date());
+        log.info("开始检测WS在线状态,当前任务 id:{}", id);
+        AjaxResult result = hostService.checkWsOnLine();
+        log.info("检测WS在线状态任务结束....,当前任务 id:{},结果:{}", id, JSON.toJSONString(result));
+    }
 }