cloud-car/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/ManageInstance.java

135 lines
4.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.muyu.vehicle;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.*;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.Common;
import com.aliyun.teautil.models.RuntimeOptions;
import com.muyu.common.redis.service.RedisService;
import com.muyu.vehicle.config.SelectInstance;
import com.muyu.vehicle.domain.InstanceInfo;
import com.muyu.vehicle.utils.CreateClient;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
@Log4j2
/**
* 项目启动创建实例
*/
public class ManageInstance implements ApplicationRunner {
@Autowired
private RedisService redisService;
/**
* 镜像ID
*/
public static final String IMAGE_ID = "m-uf6ffgkry85fwu4znr6s";
/**
* 实例类型
*/
public static final String INSTANCE_TYPE = "ecs.e-c1m1.large";
/**
* 安全组ID
*/
public static final String SECURITY_GROUP_ID = "sg-uf6glo8c4k17szhxu7sk";
/**
*交换机ID
*/
public static final String V_SWITCH_ID = "vsw-uf6xy4rbt9ggcz93t6oib";
/**
* 实例付费类型
*/
public static final String INSTANCE_CHARGE_TY = "PostPaid";
public static List<String> generateInstance() throws Exception {
// 创建阿里云ECS客户端
// 创建ECS客户端对象用于后续调用ECS相关API
Client client = CreateClient.createClient();
// 配置系统盘参数
RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk =
new RunInstancesRequest.RunInstancesRequestSystemDisk()
.setSize("40")
.setCategory("cloud_essd");
// 创建创建实例请求对象并设置参数
RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
.setRegionId("cn-shanghai") // 设置地域ID
.setImageId(IMAGE_ID) // 设置镜像ID
.setInstanceType(INSTANCE_TYPE) // 设置实例类型
.setSecurityGroupId(SECURITY_GROUP_ID) // 设置安全组ID
.setVSwitchId(V_SWITCH_ID) // 设置虚拟交换机ID
.setInstanceName("cloud-MQTT") // 设置实例名称
.setInstanceChargeType(INSTANCE_CHARGE_TY) // 设置实例付费类型为后付费按量付费
.setSystemDisk(systemDisk) // 设置系统盘配置
.setHostName("root") // 设置主机名
.setPassword("2112A-four") // 设置实例密码
.setAmount(2) // 设置创建实例的数量
.setInternetChargeType("PayByTraffic")
.setInternetMaxBandwidthOut(1);
//创建运行时选择对象
RuntimeOptions runTime =
new RuntimeOptions();
// 尝试执行创建实例请求
try {
ArrayList<String> list = new ArrayList<>();
// 复制代码运行请自行打印 API 的返回值
RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runTime);
RunInstancesResponseBody body = runInstancesResponse.getBody();
for (String instance : body.getInstanceIdSets().getInstanceIdSet()) {
list.add(instance);
}
log.info("ESC创建成功,实例ID为:" + list);
return list;
} catch (TeaException error) {
// 错误 message
log.info(error.getMessage());
// 诊断地址
log.info(error.getData().get("Recommend"));
Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
log.info("实例创建失败:" + error.getMessage());
}
return null;
}
@Override
public void run(ApplicationArguments args) throws Exception {
List<String> list = generateInstance();
log.info("创建实例成功");
log.info("正在加载实例");
Thread.sleep(30000);
List<InstanceInfo> instanceInfos = SelectInstance.selectInstance(list);
log.info("实例信息查询成功");
for (InstanceInfo instanceInfo : instanceInfos) {
redisService.setCacheObject("FourInstanceIdKey:"+instanceInfo.getInstanceId(),instanceInfo);
}
System.out.println("实例信息:"+instanceInfos);
log.info("实例信息:", JSONObject.toJSONString(instanceInfos));
}
}