开发frpc接口、增加网卡绑定触发逻辑。
This commit is contained in:
@@ -53,6 +53,9 @@ public class MessageHandler {
|
||||
String HEARTBEAT_RECOVERY_COUNT_PREFIX = "heartbeat:recovery:count:";
|
||||
|
||||
String HEARTBEAT_COUNT_PREFIX = "heartbeat:count:";
|
||||
|
||||
// Redis key定义
|
||||
private static final String USED_PORTS_KEY = "frpc:used_ports";
|
||||
private static final long HEARTBEAT_TIMEOUT = 30000; // 3分钟超时
|
||||
|
||||
|
||||
@@ -149,12 +152,44 @@ public class MessageHandler {
|
||||
RmFrpcConfigManage configManage = new RmFrpcConfigManage();
|
||||
configManage.setFrpcRemotePort(rsp.getRemotePort());
|
||||
rmFrpcConfigManageService.addFrpConnect(configManage);
|
||||
} else if(rsp.getResCode() == 3){
|
||||
// frpc状态上报
|
||||
RmFrpcConfigManage frpcData = new RmFrpcConfigManage();
|
||||
frpcData.setClientId(message.getClientId());
|
||||
frpcData.setFrpcName(rsp.getName());
|
||||
frpcData.setFrpcStatus(rsp.getIsRunning());
|
||||
frpcData.setFrpcLocalPort(rsp.getLocalPort());
|
||||
frpcData.setFrpcLocalIp(rsp.getLocalIP());
|
||||
frpcData.setFrpcCreateTime(createTime);
|
||||
frpcData.setFrpcRemotePort(rsp.getRemotePort());
|
||||
frpcData.setFrpcServerAddr(rsp.getServerAddr());
|
||||
frpcData.setFrpcServerPort(rsp.getServerPort());
|
||||
rmFrpcConfigManageService.insertRmFrpcConfigManage(frpcData);
|
||||
} else{
|
||||
if(rsp.getRemotePort() != null){
|
||||
// 生成失败 ,释放端口资源
|
||||
removeUsedPort(Integer.parseInt(rsp.getRemotePort()));
|
||||
}
|
||||
log.error("生成连接失败:{}",rsp.getResMsg());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加端口到已用集合
|
||||
*/
|
||||
public boolean addUsedPort(int port) {
|
||||
Long result = redisTemplate.opsForSet().add(USED_PORTS_KEY, String.valueOf(port));
|
||||
return result != null && result > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从已用集合中移除端口
|
||||
*/
|
||||
public boolean removeUsedPort(int port) {
|
||||
Long result = redisTemplate.opsForSet().remove(USED_PORTS_KEY, String.valueOf(port));
|
||||
return result != null && result > 0;
|
||||
}
|
||||
/**
|
||||
* 保存网卡信息
|
||||
* @param message
|
||||
@@ -1070,6 +1105,20 @@ public class MessageHandler {
|
||||
}
|
||||
|
||||
boolean isSingleInterface = networkInfoList.size() == 1;
|
||||
boolean isMultiInterface = networkInfoList.size() > 1;
|
||||
|
||||
// 查询数据库中当前的网卡数量
|
||||
RmNetworkInterface countQuery = new RmNetworkInterface();
|
||||
countQuery.setClientId(clientId);
|
||||
countQuery.setNewFlag(1);
|
||||
List<RmNetworkInterface> currentInterfaces = rmNetworkInterfaceService.selectRmNetworkInterfaceList(countQuery);
|
||||
int currentInterfaceCount = currentInterfaces.size();
|
||||
|
||||
// 判断网卡数量是否发生变化
|
||||
boolean interfaceCountChanged = false;
|
||||
if (!isRegister && currentInterfaceCount != networkInfoList.size()) {
|
||||
interfaceCountChanged = true;
|
||||
}
|
||||
|
||||
for (NetworkInfo networkInfo : networkInfoList) {
|
||||
List<NetworkInfo> childList = networkInfo.getSubInterfaces();
|
||||
@@ -1101,13 +1150,20 @@ public class MessageHandler {
|
||||
rmNetworkInterfaceChildService.insertRmNetworkInterfaceChild(insertChild);
|
||||
}
|
||||
}
|
||||
// 如果网卡数量有变动,需要更新网卡绑定状态
|
||||
if (!isRegister && interfaceCountChanged) {
|
||||
RmResourceRegistrationRemote updateParam = new RmResourceRegistrationRemote();
|
||||
updateParam.setClientId(clientId);
|
||||
updateParam.setMultiPublicIpStatus("0");
|
||||
remoteRevenueConfigService.updateStatusByResource(updateParam, SecurityConstants.INNER);
|
||||
}
|
||||
} else {
|
||||
// 更新网卡信息
|
||||
RmNetworkInterface oldInterfaceMsg = exits.get(0);
|
||||
cleanChildOldRecords(clientId, networkInfo.getMac());
|
||||
// 判断是否需要创建新记录
|
||||
boolean needCreateNew = !StringUtils.equals(networkInfo.getName(), oldInterfaceMsg.getInterfaceName())
|
||||
|| !StringUtils.equals(networkInfo.getGateway(), oldInterfaceMsg.getGateway());
|
||||
boolean needCreateNew = (!StringUtils.equals(networkInfo.getName(), oldInterfaceMsg.getInterfaceName())
|
||||
|| !StringUtils.equals(networkInfo.getGateway(), oldInterfaceMsg.getGateway())) && StringUtils.equals(networkInfo.getMac(), oldInterfaceMsg.getMacAddress());
|
||||
if(childList != null && !childList.isEmpty()){
|
||||
for (NetworkInfo info : childList) {
|
||||
RmNetworkInterfaceChild insertChild = new RmNetworkInterfaceChild();
|
||||
@@ -1130,6 +1186,13 @@ public class MessageHandler {
|
||||
RmNetworkInterface insertData = new RmNetworkInterface();
|
||||
setNetworkInterfaceData(insertData, networkInfo, clientId);
|
||||
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
|
||||
// 如果网卡名称有变化,需要更新网卡绑定状态
|
||||
if(!isRegister && !StringUtils.equals(networkInfo.getName(), oldInterfaceMsg.getInterfaceName())){
|
||||
RmResourceRegistrationRemote updateParam = new RmResourceRegistrationRemote();
|
||||
updateParam.setClientId(clientId);
|
||||
updateParam.setMultiPublicIpStatus("0");
|
||||
remoteRevenueConfigService.updateStatusByResource(updateParam, SecurityConstants.INNER);
|
||||
}
|
||||
} else {
|
||||
// 更新现有记录
|
||||
updateNetworkInterface(networkInfo, clientId, oldInterfaceMsg, isSingleInterface, isRegister);
|
||||
|
||||
Reference in New Issue
Block a user