14优化注释

master
liuyunhu 2024-04-19 20:28:39 +08:00
parent f70594f630
commit 09ff525c26
23 changed files with 375 additions and 302 deletions

View File

@ -5,15 +5,23 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
*
*
* @ProjectName: Default (Template) Project
* @Author: LiuYunHu
* @CreateTime: 2024/4/1
* @Description:
*/
@SpringBootApplication
@EnableScheduling
public class LoadCenterApplication {
/**
* main
*
* @Date: 2024/4/19 20:23
* @Param: [args]
* @Return: void
**/
public static void main(String[] args) {
SpringApplication.run(LoadCenterApplication.class, args);
System.out.println("负载中心模块启动成功");

View File

@ -10,10 +10,11 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
*
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/16
* @Description:
*/
@Configuration
@ConfigurationProperties(prefix = "config.aliyun")
@ -21,27 +22,26 @@ import org.springframework.context.annotation.Configuration;
@AllArgsConstructor
@NoArgsConstructor
public class AliConfig {
/*
/**
* access-key-id
* */
*/
private String accessKeyId;
/*
/**
* access-key-secret
* */
*/
private String accessKeySecret;
/*
/**
* id
* */
*/
private String regionId;
/*
* @Author: LiuYunHu
* @Date: 2024/4/16 21:29
* @Description:
* @Param: [aliConfig]
* @Return: com.aliyun.ecs20140526.Client
/**
*
* Date: 2024/4/19 20:17
* Param: [aliConfig]
* Return: com.aliyun.ecs20140526.Client
**/
@Bean
public Client createEcsClient(AliConfig aliConfig) throws Exception {

View File

@ -8,10 +8,11 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
*
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/16
* @Description:
*/
@Configuration
@ConfigurationProperties(prefix = "config.instance")
@ -21,54 +22,54 @@ import org.springframework.stereotype.Component;
@Component
public class InstanceSpecification {
/*
/**
* ID
* */
*/
private String imageId;
/*
/**
*
* */
*/
private String instanceType;
/*
/**
* ID
* */
*/
private String securityGroupId;
/*
/**
* ID
* */
*/
private String vSwitchId;
/*
/**
* Mbit/s0~100 0
* */
*/
private String internetMaxBandwidthOut;
/*
/**
*
* PayByBandwidth:
* PayByTraffic: 使
* PayByTraffic
* */
*/
private String internetChargeType;
/*
/**
*
* */
*/
private String size;
/*
/**
*
* */
*/
private String category;
/*
/**
* ECS
* PrePaid
* PostPaid
* */
*/
private String instanceChargeType;
}

View File

@ -18,112 +18,35 @@ import java.util.Date;
import java.util.List;
/**
* ecsopenAPI
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/16
* @Description: ecsopenAPI
*/
@Component
@Slf4j
public class AliYunEcsService {
/*
*,
* */
@Autowired
private InstanceSpecification instanceSpecification;
//应用阿里云客户端配置
private final AliConfig aliConfig;
private final Client client;
/**
* ,
*/
@Autowired
private InstanceSpecification instanceSpecification;
public AliYunEcsService(AliConfig aliConfig, Client client) {
this.aliConfig = aliConfig;
this.client = client;
}
/*
* @Author: LiuYunHu
* @Date: 2024/4/16 20:01
* @Description: ID
* @Param: []
* @Return: java.util.List<java.lang.String>
**/
public List<String> getIDList() throws Exception {
java.util.List<String> regionIds = com.aliyun.darabonbastring.Client.split(aliConfig.getRegionId(), ",", 50);
String regionId = regionIds.get(0);
DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest()
.setPageSize(100)
.setRegionId(regionId);
DescribeInstancesResponse resp = this.client.describeInstances(describeInstancesRequest);
java.util.List<DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance> instances = resp.body.instances.instance;
log.info(regionId + " 下 ECS 实例列表:");
//存储结果的List
ArrayList<String> result = new ArrayList<>();
for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : instances) {
// log.info("主机名:" + instance.hostName + " 实例ID" + instance.instanceId + " CPU" + instance.cpu + " 内存:" + instance.memory + " MB 规格:" + instance.instanceType + " 系统:" + instance.OSType + "(" + instance.OSName + ") 状态:" + instance.status);
result.add(instance.instanceId);
}
//将查询到的ecs服务器id列表 打印控制台
log.info(JSON.toJSONString(result));
//返回结果
return result;
}
/*
* @Author: LiuYunHu
* @Date: 2024/4/16 20:19
* @Description: ID ID
* @Param: instanceIds ID
* @Return:
**/
public void releaseInstances(String instanceIds) throws Exception {
// 实例名称,支持使用通配符*进行模糊搜索
String instanceName = "*";
// 强制删除有删除保护的机器
String deleteProtected = "true";
// 强制删除运行中的机器
String force = "true";
//判断是否为强制删除
if (Common.equalString(deleteProtected, "true")) {
DescribeInstancesResponse describeInstancesResp = DescribeInstances(client, aliConfig.getRegionId(), instanceIds, instanceName);
instanceIds = "";
for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : describeInstancesResp.body.instances.instance) {
instanceIds = instance.instanceId + "," + instanceIds;
if (instance.deletionProtection) {
ModifyInstanceAttribute(client, instance.instanceId);
}
}
instanceIds = com.aliyun.darabonbastring.Client.subString(instanceIds, 0, -1);
}
//如果入参为空
if (Common.empty(instanceIds)) {
com.aliyun.teaconsole.Client.log("--------------------无有效实例可删除--------------------");
return;
}
DeleteInstances(client, aliConfig.getRegionId(), instanceIds, force);
}
/*
/**
*
*
* @Author: LiuYunHu
* @Date: 2024/4/16 20:31
* @Description:
* @Param: [client, regionId, instanceIds, instanceName]
* @Return: DescribeInstancesResponse
**/
@ -140,10 +63,11 @@ public class AliYunEcsService {
return resp;
}
/*
/**
*
*
* @Author: LiuYunHu
* @Date: 2024/4/16 20:33
* @Description:
* @Param: [client, instatnceId]
* @Return: void
**/
@ -155,10 +79,11 @@ public class AliYunEcsService {
com.aliyun.teaconsole.Client.log("--------------------" + instatnceId + "释放保护取消成功--------------------");
}
/*
/**
*
*
* @Author: LiuYunHu
* @Date: 2024/4/16 20:35
* @Description:
* @Param: [client, regionId, instanceIds, force]
* @Return: void
**/
@ -172,48 +97,6 @@ public class AliYunEcsService {
com.aliyun.teaconsole.Client.log(Common.toJSONString(Common.toMap(resp)));
}
/*
* @Author: LiuYunHu
* @Date: 2024/4/16 21:44
* @Description:
* @Param: []
* @Return: java.lang.String
**/
public String createAndRunInstance() throws Exception {
//获取实例规格
// 地域Id
String regionId = aliConfig.getRegionId();
// 镜像 ID启动实例时选择的镜像资源。
String imageId = instanceSpecification.getImageId();
// 实例规格
String instanceType = instanceSpecification.getInstanceType();
// 新创建实例所属于的安全组 ID。
String securityGroupId = instanceSpecification.getSecurityGroupId();
// 虚拟交换机 ID。
String vSwitchId = instanceSpecification.getVSwitchId();
// 公网出带宽最大值,单位为 Mbit/s。取值范围0~100。 默认值0。
Integer internetMaxBandwidthOut = com.aliyun.darabonbanumber.Client.parseInt(instanceSpecification.getInternetMaxBandwidthOut());
// 网络计费类型。取值范围:
// PayByBandwidth: 按固定带宽计费。
// PayByTraffic: 按使用流量计费。
// 默认值PayByTraffic。
String internetChargeType = instanceSpecification.getInternetChargeType();
// 系统盘大小
String size = instanceSpecification.getSize();
// 系统盘的云盘种类
String category = instanceSpecification.getCategory();
// ECS实例的计费方式
// PrePaid包年包月
// PostPaid按量付费
String instanceChargeType = instanceSpecification.getInstanceChargeType();
// 批量创建实例
return RunInstances(client, regionId, imageId, instanceType, securityGroupId, vSwitchId, internetMaxBandwidthOut, internetChargeType, size, category, instanceChargeType);
}
/**
* RunInstances ECS
* RunInstancesECSDescribeRecommendInstanceTypeECS
@ -260,11 +143,129 @@ public class AliYunEcsService {
return result;
}
/**
* ID
*
* @Date: 2024/4/19 20:02
* @Param: []
* @Return: java.util.List<java.lang.String>
**/
public List<String> getIDList() throws Exception {
/*
java.util.List<String> regionIds = com.aliyun.darabonbastring.Client.split(aliConfig.getRegionId(), ",", 50);
String regionId = regionIds.get(0);
DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest()
.setPageSize(100)
.setRegionId(regionId);
DescribeInstancesResponse resp = this.client.describeInstances(describeInstancesRequest);
java.util.List<DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance> instances = resp.body.instances.instance;
log.info(regionId + " 下 ECS 实例列表:");
//存储结果的List
ArrayList<String> result = new ArrayList<>();
for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : instances) {
// log.info("主机名:" + instance.hostName + " 实例ID" + instance.instanceId + " CPU" + instance.cpu + " 内存:" + instance.memory + " MB 规格:" + instance.instanceType + " 系统:" + instance.OSType + "(" + instance.OSName + ") 状态:" + instance.status);
result.add(instance.instanceId);
}
//将查询到的ecs服务器id列表 打印控制台
log.info(JSON.toJSONString(result));
//返回结果
return result;
}
/**
* ID ID
*
* @Author: LiuYunHu
* @Date: 2024/4/16 20:19
* @Description:
* @Param: instanceIds ID
**/
public void releaseInstances(String instanceIds) throws Exception {
// 实例名称,支持使用通配符*进行模糊搜索
String instanceName = "*";
// 强制删除有删除保护的机器
String deleteProtected = "true";
// 强制删除运行中的机器
String force = "true";
//判断是否为强制删除
if (Common.equalString(deleteProtected, "true")) {
DescribeInstancesResponse describeInstancesResp = DescribeInstances(client, aliConfig.getRegionId(), instanceIds, instanceName);
instanceIds = "";
for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : describeInstancesResp.body.instances.instance) {
instanceIds = instance.instanceId + "," + instanceIds;
if (instance.deletionProtection) {
ModifyInstanceAttribute(client, instance.instanceId);
}
}
instanceIds = com.aliyun.darabonbastring.Client.subString(instanceIds, 0, -1);
}
//如果入参为空
if (Common.empty(instanceIds)) {
com.aliyun.teaconsole.Client.log("--------------------无有效实例可删除--------------------");
return;
}
DeleteInstances(client, aliConfig.getRegionId(), instanceIds, force);
}
/**
*
*
* @Author: LiuYunHu
* @Date: 2024/4/16 21:44
* @Param: []
* @Return: java.lang.String
**/
public String createAndRunInstance() throws Exception {
//获取实例规格
// 地域Id
String regionId = aliConfig.getRegionId();
// 镜像 ID启动实例时选择的镜像资源。
String imageId = instanceSpecification.getImageId();
// 实例规格
String instanceType = instanceSpecification.getInstanceType();
// 新创建实例所属于的安全组 ID。
String securityGroupId = instanceSpecification.getSecurityGroupId();
// 虚拟交换机 ID。
String vSwitchId = instanceSpecification.getVSwitchId();
// 公网出带宽最大值,单位为 Mbit/s。取值范围0~100。 默认值0。
Integer internetMaxBandwidthOut = com.aliyun.darabonbanumber.Client.parseInt(instanceSpecification.getInternetMaxBandwidthOut());
// 网络计费类型。取值范围:
// PayByBandwidth: 按固定带宽计费。
// PayByTraffic: 按使用流量计费。
// 默认值PayByTraffic。
String internetChargeType = instanceSpecification.getInternetChargeType();
// 系统盘大小
String size = instanceSpecification.getSize();
// 系统盘的云盘种类
String category = instanceSpecification.getCategory();
// ECS实例的计费方式
// PrePaid包年包月
// PostPaid按量付费
String instanceChargeType = instanceSpecification.getInstanceChargeType();
// 批量创建实例
return RunInstances(client, regionId, imageId, instanceType, securityGroupId, vSwitchId, internetMaxBandwidthOut, internetChargeType, size, category, instanceChargeType);
}
/**
*
*
* @Author: LiuYunHu
* @Date: 2024/4/16 22:02
* @Description:
* @Param: [instanceIds] i-uf6chlqotgoc9h173alu
**/
public List<DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance> queryInstancesInformation(String instanceIds) {

View File

@ -5,10 +5,11 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
* mqtt
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/13
* @Description: mqtt
*/
@Data
@AllArgsConstructor

View File

@ -12,20 +12,22 @@ import org.springframework.stereotype.Component;
import java.io.IOException;
/**
* mqtt
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/15
* @Description: mqtt
*/
@Component
@Slf4j
public class MqttUtil {
/*
/**
* IPIPfluxmq
*
* @Author: LiuYunHu
* @Date: 2024/4/15 17:26
* @Description: IPIPfluxmq
* @Param: [IP]
* @Return: int
**/

View File

@ -8,20 +8,22 @@ import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
/**
*
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/13
* @Description:
*/
@Component
public class UserUtil {
@Autowired
private RedisService redisService;
/*
/**
* []
*
* @Author: LiuYunHu
* @Date: 2024/4/13 9:25
* @Description: []
* @Param: [input]
* @Return: java.lang.String
**/
@ -32,10 +34,11 @@ public class UserUtil {
}
/*
/**
* token
*
* @Author: LiuYunHu
* @Date: 2024/4/13 11:42
* @Description: token
* @Param:
* @Return:
**/

View File

@ -8,10 +8,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
*
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/15
* @Description:
*/
@RestController
@ -21,10 +22,10 @@ public class LoadCenterController {
private LoadCenterService loadCenterService;
/*
/**
* IP
* @Author: LiuYunHu
* @Date: 2024/4/15 14:57
* @Description: IP
* @Param: []
* @Return: com.lyh.common.domain.resp.Result<java.lang.String>
**/

View File

@ -8,10 +8,11 @@ import org.springframework.stereotype.Component;
import java.util.List;
/**
* IP
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/18
* @Description: IP
*/
@Component
public class GatewayIpAndLoadCountCache extends GatewayCacheAbs<String> {
@ -22,8 +23,9 @@ public class GatewayIpAndLoadCountCache extends GatewayCacheAbs<String> {
return "gateway:load:";
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: [gatewayNodeIps]
* @Return: void
@ -33,8 +35,9 @@ public class GatewayIpAndLoadCountCache extends GatewayCacheAbs<String> {
redisService.setCacheList(encode(gatewayIpAndLoadCountKey), ipAndLoadCounts);
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: []
* @Return: java.util.List<java.lang.String>
@ -44,8 +47,9 @@ public class GatewayIpAndLoadCountCache extends GatewayCacheAbs<String> {
return JSON.parseArray(JSON.toJSONString(cacheList), IpAndLoadCount.class);
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: []
* @Return: void

View File

@ -8,10 +8,11 @@ import org.springframework.stereotype.Component;
import java.util.List;
/**
* IP
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/18
* @Description: IP
*/
@Component
public class GatewayIpAndLoadWeightCache extends GatewayCacheAbs<String> {
@ -22,8 +23,9 @@ public class GatewayIpAndLoadWeightCache extends GatewayCacheAbs<String> {
return "gateway:load:";
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: [gatewayNodeIps]
* @Return: void
@ -33,8 +35,9 @@ public class GatewayIpAndLoadWeightCache extends GatewayCacheAbs<String> {
redisService.setCacheList(encode(gatewayIpAndWeightKey), ipAndWeights);
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: []
* @Return: java.util.List<java.lang.String>
@ -44,8 +47,9 @@ public class GatewayIpAndLoadWeightCache extends GatewayCacheAbs<String> {
return JSON.parseArray(JSON.toJSONString(cacheList), IpAndWeight.class);
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: []
* @Return: void

View File

@ -6,10 +6,11 @@ import org.springframework.stereotype.Component;
import java.util.List;
/**
* id
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/19
* @Description: id
*/
@Component
public class GatewayNodeIdCache extends GatewayCacheAbs<String> {
@ -20,8 +21,9 @@ public class GatewayNodeIdCache extends GatewayCacheAbs<String> {
return "gateway:load:";
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: [gatewayNodeIps]
* @Return: void
@ -31,8 +33,9 @@ public class GatewayNodeIdCache extends GatewayCacheAbs<String> {
redisService.setCacheList(encode(gatewayLoadNodeIdKey), gatewayNodeIds);
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: []
* @Return: java.util.List<java.lang.String>
@ -41,8 +44,9 @@ public class GatewayNodeIdCache extends GatewayCacheAbs<String> {
return redisService.getCacheList(encode(gatewayLoadNodeIdKey));
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: []
* @Return: void

View File

@ -8,10 +8,11 @@ import org.springframework.stereotype.Component;
import java.util.List;
/**
*
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/18
* @Description:
*/
@Component
@ -24,10 +25,11 @@ public class GatewayNodeInfoCache extends GatewayCacheAbs<String> {
return "gateway:load:";
}
/*
/**
*
*
* @Author: LiuYunHu
* @Date: 2024/4/18 15:16
* @Description:
* @Param:
* @Return: void
**/
@ -36,10 +38,11 @@ public class GatewayNodeInfoCache extends GatewayCacheAbs<String> {
redisService.setCacheList(encode(gatewayLoadInfoKey), gatewayNodeInfos);
}
/*
/**
*
*
* @Author: LiuYunHu
* @Date: 2024/4/18 15:19
* @Description:
* @Param: id
* @Return:
**/
@ -49,10 +52,11 @@ public class GatewayNodeInfoCache extends GatewayCacheAbs<String> {
return JSON.parseArray(JSON.toJSONString(cacheList), GatewayNodeInfo.class);
}
/*
/**
*
*
* @Author: LiuYunHu
* @Date: 2024/4/18 15:19
* @Description:
* @Param: id
* @Return: void
**/

View File

@ -6,10 +6,11 @@ import org.springframework.stereotype.Component;
import java.util.List;
/**
* IP
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/18
* @Description: IP
*/
@Component
public class GatewayNodeIpCache extends GatewayCacheAbs<String> {
@ -20,8 +21,9 @@ public class GatewayNodeIpCache extends GatewayCacheAbs<String> {
return "gateway:load:";
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: [gatewayNodeIps]
* @Return: void
@ -31,8 +33,9 @@ public class GatewayNodeIpCache extends GatewayCacheAbs<String> {
redisService.setCacheList(encode(gatewayLoadNodeIpKey), gatewayNodeIps);
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: []
* @Return: java.util.List<java.lang.String>
@ -41,8 +44,9 @@ public class GatewayNodeIpCache extends GatewayCacheAbs<String> {
return redisService.getCacheList(encode(gatewayLoadNodeIpKey));
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: []
* @Return: void

View File

@ -6,10 +6,11 @@ import org.springframework.stereotype.Component;
import java.util.List;
/**
* IP
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/18
* @Description: IP
*/
@Component
public class GatewayNodeOrderCache extends GatewayCacheAbs<String> {
@ -20,8 +21,9 @@ public class GatewayNodeOrderCache extends GatewayCacheAbs<String> {
return "gateway:load:";
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: [gatewayNodeIps]
* @Return: void
@ -32,8 +34,9 @@ public class GatewayNodeOrderCache extends GatewayCacheAbs<String> {
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: []
* @Return: java.util.List<java.lang.String>
@ -42,8 +45,9 @@ public class GatewayNodeOrderCache extends GatewayCacheAbs<String> {
return redisService.getCacheList(encode(gatewayNodeOrderKey));
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:37
* @Param: []
* @Return: void

View File

@ -4,10 +4,11 @@ import com.lyh.common.redis.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/18
* @Description:
*/
public abstract class GatewayCacheAbs<K> {

View File

@ -6,10 +6,11 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/18
* @Description:
*/
@Data
@NoArgsConstructor
@ -28,43 +29,43 @@ public class GatewayNodeInfo {
* */
/*
/**
* ID
* */
*/
private String instanceId;
/*
/**
*
* */
*/
private String instanceName;
/*
/**
*
* */
*/
private String status;
/*
/**
* IP
* */
*/
private String publicIpAddress;
/*
/**
* IP
* */
*/
private String privateIpAddress;
/*
/**
*
* */
*/
private String creationTime;
/*
/**
*
* */
*/
private String expiredTime;
/*
/**
*
* */
*/
private Boolean recyclable;
}

View File

@ -5,16 +5,23 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
* IPIP
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/15
* @Description: IPIP
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class IpAndLoadCount {
/**
* IP
*/
private String ip;
/**
*
*/
private Integer loadCount;
}

View File

@ -5,16 +5,23 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
* IP
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/15
* @Description: //节点IP和对应的权重
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class IpAndWeight {
/**
* IP
*/
private String nodeIp;
/**
*
*/
private Integer weight;
}

View File

@ -18,10 +18,11 @@ import java.util.ArrayList;
import java.util.List;
/**
*
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/19
* @Description:
*/
@Component
@Slf4j
@ -32,43 +33,48 @@ public class HandleCache {
@Autowired
private AliYunEcsService aliYunEcsService;
/*
/**
*
* */
*/
@Autowired
private GatewayNodeInfoCache gatewayNodeInfoCache;
/*
/**
* IP
* */
*/
@Autowired
private GatewayNodeIpCache gatewayNodeIpCache;
/*
/**
* ID
* */
*/
@Autowired
private GatewayNodeIdCache gatewayNodeIdCache;
/*
/**
* IP
* */
*/
@Autowired
private GatewayIpAndLoadCountCache gatewayIpAndLoadCountCache;
/*
/**
* IP
* */
*/
@Autowired
private GatewayIpAndLoadWeightCache gatewayIpAndLoadWeightCache;
/*
/**
* IP
* */
*/
@Autowired
private GatewayNodeOrderCache gatewayNodeOrderCache;
//刷新所有的缓存
/**
*
* Date: 2024/4/19 20:19
* Param: []
* Return: void
**/
@Scheduled(cron = "0/2 * * * * ?")
public void refreshAllCache() {
this.getNodeIDList();
@ -80,8 +86,9 @@ public class HandleCache {
}
/*
* @Description: id
/**
* id
*
* @Date: 2024/4/19 9:09
* @Param: []
* @Return: void
@ -102,8 +109,9 @@ public class HandleCache {
}
}
/*
* @Description:
/**
*
*
* @Date: 2024/4/18 21:18
* @Param: []
* @Return: void
@ -185,10 +193,11 @@ public class HandleCache {
}
/*
/**
* IP
*
* @Author: LiuYunHu
* @Date: 2024/4/17 17:14
* @Description: IP
* @Param: []
* @Return: List<String>
**/
@ -220,10 +229,11 @@ public class HandleCache {
}
/*
/**
* IPIP
*
* @Author: LiuYunHu
* @Date: 2024/4/17 19:41
* @Description: IPIP
* @Param: ecsIPList
* @Return: List<IpAndLoadCount>
**/
@ -239,9 +249,9 @@ public class HandleCache {
ArrayList<IpAndLoadCount> ipAndLoadCounts = new ArrayList<>();
//拿到IP后获取各个IP的负载量
nodeIPList.forEach(ip -> {
ipAndLoadCounts.add(mqttUtil.getFetchLoad(ip));
});
nodeIPList.forEach(
ip -> ipAndLoadCounts.add(mqttUtil.getFetchLoad(ip))
);
log.info("各个IP的负载量{}", ipAndLoadCounts);
@ -249,10 +259,11 @@ public class HandleCache {
}
/*
/**
* IPIP
*
* @Author: LiuYunHu
* @Date: 2024/4/17 19:49
* @Description: IPIP
* @Param: ipAndLoadCountList
* @Return: List<IpAndWeight>
**/
@ -289,10 +300,11 @@ public class HandleCache {
gatewayIpAndLoadWeightCache.put(ipAndWeights);
}
/*
/**
* IPIP
*
* @Author: LiuYunHu
* @Date: 2024/4/17 20:02
* @Description: IPIP
* @Param: []
* @Return:
**/

View File

@ -13,23 +13,24 @@ import org.springframework.stereotype.Component;
import java.util.List;
/**
*
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/13
* @Description:
*/
@Component
@Slf4j
public class Timer {
/*
/**
* api
* */
*/
private final AliYunEcsService aliYunEcsService;
/*
/**
*
* */
*/
private final GatewayIpAndLoadCountCache gatewayIpAndLoadCountCache;
private final GatewayNodeIdCache gatewayNodeIdCache;
@ -44,13 +45,14 @@ public class Timer {
}
@Scheduled(cron = "0/10 * * * * ?")
/*
* @Description:
/**
*
*
* @Date: 2024/4/19 9:44
* @Param: []
* @Return: void
**/
@Scheduled(cron = "0/10 * * * * ?")
public void dynamicExpansion() {
//先获取所有的负载列表
List<IpAndLoadCount> ipAndLoadCounts = gatewayIpAndLoadCountCache.get();
@ -85,13 +87,14 @@ public class Timer {
}
@Scheduled(cron = "0/10 * * * * ?")
/* TODO
* @Description:
/**
*
*
* @Date: 2024/4/19 9:44
* @Param: []
* @Return: void
**/
@Scheduled(cron = "0/10 * * * * ?")
public void dynamicReduction() {
//求出所有的节点ID
List<String> nodeIds = gatewayNodeIdCache.get();

View File

@ -3,10 +3,11 @@ package com.lyh.service;
import com.lyh.common.domain.resp.Result;
/**
*
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/15
* @Description:
*/
public interface LoadCenterService {

View File

@ -11,31 +11,33 @@ import org.springframework.stereotype.Service;
import java.util.List;
/**
*
*
* @ProjectName: LoadCenter
* @Author: LiuYunHu
* @CreateTime: 2024/4/15
* @Description:
*/
@Service
@Slf4j
public class LoadCenterServiceImpl implements LoadCenterService {
/*
/**
*
* */
*/
@Autowired
private HandleCache handleCache;
/*
/**
* IP
* */
*/
@Autowired
private GatewayNodeOrderCache gatewayNodeOrderCache;
/*
/**
* IP
*
* @Author: LiuYunHu
* @Date: 2024/4/15 21:49
* @Description: IP
* @Param: []
* @Return: com.lyh.common.domain.resp.Result<java.lang.String>
**/
@ -52,8 +54,6 @@ public class LoadCenterServiceImpl implements LoadCenterService {
return Result.success(result);
}
}

View File

@ -72,7 +72,7 @@ public class Test {
**/
@org.junit.jupiter.api.Test
public void releaseInstances() throws Exception {
aliYunEcsService.releaseInstances("i-uf6h4s0jtpvrtgx574s1,");
aliYunEcsService.releaseInstances("i-uf6dsbjd5l364ey5wnkd");
}
/*