package com.fdkankan.mqcontroller.utils; import com.alibaba.fastjson.JSONObject; import com.aliyun.ess20220222.Client; import com.aliyun.ess20220222.models.ExecuteScalingRuleRequest; import com.aliyun.ess20220222.models.ExecuteScalingRuleResponse; import com.aliyun.ess20220222.models.RemoveInstancesRequest; import com.aliyun.ess20220222.models.RemoveInstancesResponse; import com.aliyun.tea.TeaException; import com.aliyun.teaopenapi.models.Config; import lombok.extern.slf4j.Slf4j; import java.util.Arrays; import java.util.UUID; @Slf4j public class ECSUtils { public static Client initClient(String accessKey,String accessKeySecret,String endPoint) throws Exception { Config config = new Config(); config.setAccessKeyId(accessKey); config.setAccessKeySecret(accessKeySecret); config.setEndpoint(endPoint); return new Client(config); } public static Boolean executeScalingActivity(Client client, String scalingRuleAri) throws Exception{ ExecuteScalingRuleRequest request = new ExecuteScalingRuleRequest(); request.setScalingRuleAri(scalingRuleAri); request.setClientToken(UUID.randomUUID().toString()); // 使用UUID生成唯一标识,避免并发冲突 ExecuteScalingRuleResponse response = client.executeScalingRule(request); log.info("executeScalingActivity-resp:{}",JSONObject.toJSONString(response)); if(response.getStatusCode() == 200){ return true; } return false; } public static Boolean executeScalingStop(Client client, String groupId,String instanceId) { try { RemoveInstancesRequest removeInstancesRequest = new RemoveInstancesRequest(); removeInstancesRequest.setScalingGroupId(groupId); removeInstancesRequest.setInstanceIds(Arrays.asList(instanceId)); RemoveInstancesResponse removeInstancesResponse = client.removeInstances(removeInstancesRequest); log.info("executeScalingStop-resp:{}",JSONObject.toJSONString(removeInstancesResponse)); if(removeInstancesResponse.getStatusCode() == 200){ return true; } }catch (TeaException e){ //实例不存在视作关闭成功 if(e.getStatusCode().equals(400) && e.getMessage().contains("The specified instance does not exist")){ return true; } }catch (Exception e){ log.info("delEcs--error:",e); } return false; } public static boolean createEcs(String accessKey,String secret,String endpoint,String scalingRuleAri){ try { Client client = initClient(accessKey,secret,endpoint); return executeScalingActivity(client, scalingRuleAri); }catch (Exception e){ log.info("createEcs--error:",e); } return false; } public static Boolean delEcs(String accessKey,String secret,String endpoint,String scalingGroupId,String instanceId){ try { Client client = initClient(accessKey,secret,endpoint); return executeScalingStop(client, scalingGroupId,instanceId); }catch (Exception e){ log.info("delEcs--error:",e); } return false; } }