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<ServerNode> getOneHealthyInstance(String serverName) throws NacosException {
|
ResultVO<ServerNode> 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<List<ServerNode>> listHealthyInstance(String serverName) throws NacosException {
|
ResultVO<List<ServerNode>> resultVO = new ResultVO<>();
|
resultVO.setCode(ResultCodes.OK.getCode());
|
List<Instance> instanceList = namingService.getAllInstances(serverName);
|
if(instanceList != null && instanceList.size() > 0){
|
List<ServerNode> 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;
|
}
|
}
|