package com.gkhy.safePlatform.service.impl; import com.alibaba.nacos.api.annotation.NacosInjected; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; import com.gkhy.safePlatform.commons.enums.ResultCodes; import com.gkhy.safePlatform.commons.vo.ResultVO; import com.gkhy.safePlatform.config.serverNode.ServerNodeEntry; import com.gkhy.safePlatform.config.serverNode.WebSocketNodesMap; import com.gkhy.safePlatform.model.dto.ServerNode; import com.gkhy.safePlatform.service.WebsocketServerNamingService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @Service public class WebsocketServerNamingServiceImpl implements WebsocketServerNamingService { @Resource private WebSocketNodesMap webSocketNodesMap; @NacosInjected private NamingService namingService; @Override public ResultVO getOneHealthyInstance(String serverName) throws NacosException { ResultVO resultVO = new ResultVO<>(); resultVO.setCode(ResultCodes.OK.getCode()); Instance instance = namingService.selectOneHealthyInstance(serverName); if(instance != null){ ServerNode node = transferToExtranetNode(instance); if(node != null){ node.setServerName(serverName); resultVO.setCount(1); resultVO.setData(node); } } return resultVO; } @Override public ResultVO> listHealthyInstance(String serverName) throws NacosException { ResultVO> resultVO = new ResultVO<>(); resultVO.setCode(ResultCodes.OK.getCode()); List instanceList = namingService.getAllInstances(serverName); if(instanceList != null && instanceList.size() > 0){ List nodeList = new ArrayList<>(); for(Instance instance : instanceList){ ServerNode node = transferToExtranetNode(instance); if(node != null){ node.setServerName(serverName); nodeList.add(node); } } resultVO.setData(nodeList); resultVO.setCount(nodeList.size()); } return resultVO; } /** * 将内网实例转换为外网可访问的节点 * @param instance * @return */ private ServerNode transferToExtranetNode(Instance instance){ ServerNode node = null; if(instance == null || instance.getIp() == null || instance.getIp().isEmpty()) return null; String ipStr = instance.getIp(); if(webSocketNodesMap.getNodes().containsKey(ipStr)){ ServerNodeEntry entry = webSocketNodesMap.getNodes().get(ipStr); if(entry != null){ node = new ServerNode(); node.setIp(entry.getOutIp()); node.setPort(entry.getOutPort()); } } return node; } }