diff --git a/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java b/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java
index db90c1e..e7f6c53 100644
--- a/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java
+++ b/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java
@@ -6,6 +6,7 @@ import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
import java.util.*;
import java.util.concurrent.TimeUnit;
@@ -17,6 +18,7 @@ import java.util.concurrent.TimeUnit;
**/
@SuppressWarnings(value = {"unchecked", "rawtypes"})
@Component
+//@Service
public class RedisService {
@Autowired
public RedisTemplate redisTemplate;
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/pom.xml b/cloud-modules/cloud-modules-vehicle-gateway/pom.xml
index d5eef32..2e10df2 100644
--- a/cloud-modules/cloud-modules-vehicle-gateway/pom.xml
+++ b/cloud-modules/cloud-modules-vehicle-gateway/pom.xml
@@ -83,6 +83,10 @@
com.muyu
cloud-common-xxl
+
+
+
+
com.muyu
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/VehicleGatewayApplication.java b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/VehicleGatewayApplication.java
index 2221cdf..8472dbf 100644
--- a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/VehicleGatewayApplication.java
+++ b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/VehicleGatewayApplication.java
@@ -4,13 +4,16 @@ import com.muyu.common.security.annotation.EnableCustomConfig;
import com.muyu.common.security.annotation.EnableMyFeignClients;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
/**
* 车辆网关负载中心
*/
@EnableCustomConfig
-@EnableMyFeignClients
+@EnableFeignClients
@SpringBootApplication
+//@ComponentScan(basePackages = "com.muyu")
public class VehicleGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(VehicleGatewayApplication.class, args);
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/AliYunConfig.java b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/AliYunConfig.java
new file mode 100644
index 0000000..fbd24f3
--- /dev/null
+++ b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/AliYunConfig.java
@@ -0,0 +1,36 @@
+package com.muyu.cloud.vehicle.gateway.aliyun;
+
+import com.aliyun.ecs20140526.Client;
+import com.aliyun.teaopenapi.models.Config;
+import com.muyu.cloud.vehicle.gateway.config.AliProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * :Ali客户端
+ */
+@Configuration
+public class AliYunConfig {
+
+ @Autowired
+ private AliProperties aliProperties;
+
+ @Bean
+ public Client createClient() {
+ // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
+ Config config = new Config()
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
+ .setAccessKeyId(aliProperties.getAccessKeyId())
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+ .setAccessKeySecret(aliProperties.getAccessKeySecret());
+ // Endpoint 请参考 https://api.aliyun.com/product/Ecs
+ config.endpoint = aliProperties.getEndpoint();
+ try {
+ return new Client(config);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/DelInstance.java b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/DelInstance.java
deleted file mode 100644
index 1b40738..0000000
--- a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/DelInstance.java
+++ /dev/null
@@ -1,135 +0,0 @@
-// This file is auto-generated, don't edit it. Thanks.
-package com.muyu.cloud.vehicle.gateway.aliyun.ecs;
-
-import com.aliyun.ecs20140526.Client;
-import com.aliyun.ecs20140526.models.DeleteInstancesRequest;
-import com.aliyun.ecs20140526.models.DescribeInstancesRequest;
-import com.aliyun.ecs20140526.models.DescribeInstancesResponse;
-import com.aliyun.ecs20140526.models.DescribeInstancesResponseBody;
-import com.aliyun.tea.*;
-import com.aliyun.teaopenapi.models.Config;
-import com.aliyun.teautil.Common;
-import com.aliyun.teautil.models.RuntimeOptions;
-import lombok.extern.log4j.Log4j2;
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.event.ContextClosedEvent;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 删除实例
- */
-@Log4j2
-@Component
-public class DelInstance implements ApplicationListener {
-
- @Autowired
- private StringRedisTemplate redisTemplate;
-
-
- /**
- * description :
- * 使用AK&SK初始化账号Client
- * @return Client
- *
- * @throws Exception
- */
- public static Client createClient() throws Exception {
- // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
- // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
- Config config = new Config()
- // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
- .setAccessKeyId("LTAI5t7Fnx2QLTYLSu9357wP")
- // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
- .setAccessKeySecret("3LOnydNZ25ytsTGczuSygElx0HJ6nN");
- // Endpoint 请参考 https://api.aliyun.com/product/Ecs
- config.endpoint = "ecs.cn-shanghai.aliyuncs.com";
- return new Client(config);
- }
-
-
-
- public void delInstance() throws Exception{
- //创建ECS客户端对象,用于后续调用ECS相关API
- Client client = DelInstance.createClient();
-
- List list = redisTemplate.opsForList().range("instanceIds",0,-1);
-
-// DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest()
-// .setRegionId("cn-shanghai");
-
-// //创建运行时选择对象,用于配置运行时的选项参数
-// RuntimeOptions runtimeOptions = new RuntimeOptions();
-//
-// //获取实例列表
-// DescribeInstancesResponse describeInstancesResponse = client.describeInstancesWithOptions(describeInstancesRequest, runtimeOptions);
-//
-// //提取实例ID集合
-// ArrayList list = new ArrayList<>();
-// DescribeInstancesResponseBody body = describeInstancesResponse.getBody();
-//
-// for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()) {
-// list.add(instance.getInstanceId());
-// }
-//
-// System.out.println("Instance IDs"+list);
-
- // 创建删除实例请求对象,并设置请求参数
- DeleteInstancesRequest deleteInstancesRequest = new DeleteInstancesRequest()
- // 设置地域ID,指定要删除的实例所属的地域ID。
- .setRegionId("cn-shanghai")
- //设置DryRun为True,用于验证请求是否可以成功,但不实际执行删除操作
- .setDryRun(false)
- // 设置Force为true,表示即使实例有正在运行的任务,也强制删除实例
- .setForce(true)
- // 设置TerminateSubscription为true,表示删除按订阅付费的实例时终止订阅
- .setTerminateSubscription(true)
- // 设置实例ID列表,使用参数名称 instanceId,参数类型为数组。
- .setInstanceId(list);
- // 创建运行时选项对象,用于配置运行时的选项参数
- RuntimeOptions runtime = new RuntimeOptions();
- try{
- //复制代码运行请自行打印 API 的返回值
- client.deleteInstancesWithOptions(deleteInstancesRequest,runtime);
- } catch (TeaException error) {
- // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
- // 错误 message
- log.error(error.getMessage());
- // 诊断地址
- log.error(error.getData().get("Recommend"));
- Common.assertAsString(error.message);
- } catch (Exception _error){
- TeaException error = new TeaException(_error.getMessage(), _error);
- // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
- // 错误 message
- log.error(error.getMessage());
- // 诊断地址
- log.error(error.getData().get("Recommend"));
- Common.assertAsString(error.message);
- }
- }
-
-
-// @Override
-// public void destroy() throws Exception {
-// log.info("===============>开始执行删除实例方法");
-// delInstance();
-// }
-
- @Override
- public void onApplicationEvent(ContextClosedEvent event) {
- try{
- log.info("=======>删除实例");
- delInstance();
-// redisTemplate.delete("instanceIds");
-// redisTemplate.delete("instanceList");
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-}
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/DeleteSample.java b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/DeleteSample.java
new file mode 100644
index 0000000..49b9e68
--- /dev/null
+++ b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/DeleteSample.java
@@ -0,0 +1,30 @@
+package com.muyu.cloud.vehicle.gateway.aliyun.ecs;
+
+import com.muyu.cloud.vehicle.gateway.aliyun.service.AliYunEcsService;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *删除实例方法
+ */
+@Log4j2
+@Component
+public class DeleteSample implements DisposableBean {
+
+ @Autowired
+ private AliYunEcsService aliYunEcsService;
+ @Override
+ public void destroy() throws Exception {
+ try{
+ log.info("==========开始执行删除实例方法");
+ Thread.sleep(10000);
+ aliYunEcsService.deleteInstance();
+ } catch (Exception e) {
+ log.info("删除实例失败");
+ throw new RuntimeException(e);
+ }
+ log.info("删除实例成功");
+ }
+}
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/QueryInstance.java b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/QueryInstance.java
deleted file mode 100644
index de0e9d5..0000000
--- a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/QueryInstance.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.muyu.cloud.vehicle.gateway.aliyun.ecs;
-
-import com.aliyun.ecs20140526.Client;
-import com.aliyun.ecs20140526.models.DescribeInstancesRequest;
-import com.aliyun.ecs20140526.models.DescribeInstancesResponse;
-import com.aliyun.teaopenapi.models.Config;
-import com.aliyun.darabonba.env.EnvClient;
-import com.aliyun.teautil.Common;
-import com.aliyun.teautil.models.RuntimeOptions;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * 查询一台或多台实例的详细信息
- */
-public class QueryInstance {
-
- /**
- * description :
- * 使用AK&SK初始化账号Client
- * @return Client
- *
- * @throws Exception
- */
- public static Client createClient(String alibabaCloudAccessKeyId, String alibabaCloudAccessKeySecret) throws Exception{
- Config config = new Config()
- .setAccessKeyId("LTAI5t7Fnx2QLTYLSu9357wP")
- .setAccessKeySecret("3LOnydNZ25ytsTGczuSygElx0HJ6nN");
- config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
- return new Client(config);
- }
-
- public static Client createClientWithSTS() throws Exception {
- Config config = new Config()
- .setAccessKeyId("LTAI5t7Fnx2QLTYLSu9357wP")
- .setAccessKeySecret("3LOnydNZ25ytsTGczuSygElx0HJ6nN")
- .setSecurityToken("token")
- .setType("sts");
- config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
- return new Client(config);
- }
-
- public static void main(String[] args_) throws Exception{
- List list = Arrays.asList(args_);
-
- Client client = QueryInstance.createClient(EnvClient.getEnv("LTAI5t7Fnx2QLTYLSu9357wP"), EnvClient.getEnv("3LOnydNZ25ytsTGczuSygElx0HJ6nN"));
- DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest()
- .setRegionId("cn-shanghai")
- .setInternetChargeType("PayByTraffic")
- .setInstanceChargeType("PostPaid");
- RuntimeOptions runtime = new RuntimeOptions();
- DescribeInstancesResponse resp = client.describeInstancesWithOptions(describeInstancesRequest, runtime);
- com.aliyun.teaconsole.Client.log(Common.toJSONString(resp));
-
- }
-
-
-}
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/Sample.java b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/Sample.java
index 50c547e..f15b318 100644
--- a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/Sample.java
+++ b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/Sample.java
@@ -1,114 +1,57 @@
package com.muyu.cloud.vehicle.gateway.aliyun.ecs;
-import com.aliyun.ecs20140526.Client;
-import com.aliyun.ecs20140526.models.*;
-import com.aliyun.tea.*;
-import com.aliyun.teaopenapi.models.Config;
-import com.aliyun.teautil.models.RuntimeOptions;
-import com.muyu.cloud.vehicle.gateway.aliyun.domain.Instance;
+import com.muyu.cloud.vehicle.gateway.aliyun.service.AliYunEcsService;
+import com.muyu.cloud.vehicle.gateway.config.AliProperties;
+import com.muyu.cloud.vehicle.gateway.domain.AliInstance;
+import com.muyu.common.redis.service.RedisService;
import lombok.extern.log4j.Log4j2;
-import org.apache.logging.log4j.CloseableThreadContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
-import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
-import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
/**
- * 批量创建ECS实例
+ * 创建实例
*/
+
@Log4j2
@Component
-public class Sample implements ApplicationRunner {
+public class Sample implements ApplicationRunner{
+ @Autowired
+ private AliYunEcsService aliYunEcsService;
+ @Autowired
+ private AliProperties aliProperties;
- /**
- * description :
- * 使用AK&SK初始化账号Client
- * @return Client
- *
- * @throws Exception
- */
- public static Client createClient() throws Exception {
- // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
- Config config = new Config()
- // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
- .setAccessKeyId("LTAI5t7Fnx2QLTYLSu9357wP")
- // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
- .setAccessKeySecret("3LOnydNZ25ytsTGczuSygElx0HJ6nN");
- // Endpoint 请参考 https://api.aliyun.com/product/Ecs
- config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
- return new Client(config);
- }
-
- public void creatInstance() throws Exception {
-
- // 将命令行参数转换为字符串列表
- List args = Arrays.asList();
- // 创建阿里云ECS客户端
- Client client = Sample.createClient();
- // 配置系统盘参数
- RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk()
- .setSize("20")// 设置系统盘大小为40GB
- .setCategory("cloud_essd");// 设置系统盘类型为cloud_essd
- // 创建创建实例请求对象并设置参数
- RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
- .setRegionId("cn-shanghai") // 设置地域ID
- .setImageId("m-uf66taa8r57ky0pg3e7s")// 设置镜像ID
- .setInstanceType("ecs.e-c1m1.large")// 设置实例类型
- .setSecurityGroupId("sg-uf6hyictocodexptlgiv")// 设置安全组ID
- .setVSwitchId("vsw-uf6ags5luz17qd6ckn2tb")// 设置虚拟交换机ID
- .setInstanceName("launch-advisor-20240929")// 设置实例名称
- .setInstanceChargeType("PostPaid")// 设置实例付费类型为后付费按量付费
- .setSystemDisk(systemDisk)// 设置系统盘配置
- .setHostName("root")// 设置主机名
- .setPassword("@ywt021900")// 设置实例密码
- .setAmount(1)// 设置创建实例的数量
- .setInternetChargeType("PayByTraffic")// 设置互联网计费类型为按流量计费
- .setInternetMaxBandwidthOut(1);// 设置互联网最大出带宽为1 Mbps
- RuntimeOptions runtime = new RuntimeOptions();
- try {
- // 复制代码运行请自行打印 API 的返回值
- RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runtime);
- RunInstancesResponseBody body = runInstancesResponse.getBody();
- ArrayList list = new ArrayList<>(body.getInstanceIdSets().getInstanceIdSet());
- log.info("实例ID:{}", list);
-
- } catch (TeaException error) {
- // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
- // 错误 message
- System.out.println(error.getMessage());
- // 诊断地址
- System.out.println(error.getData().get("Recommend"));
- com.aliyun.teautil.Common.assertAsString(error.message);
- } catch (Exception _error) {
- TeaException error = new TeaException(_error.getMessage(), _error);
- // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
- // 错误 message
- System.out.println(error.getMessage());
- // 诊断地址
- System.out.println(error.getData().get("Recommend"));
- com.aliyun.teautil.Common.assertAsString(error.message);
- }
- }
-
-// private static DescribeInstancesResponse queryInstanceDetails(Client client) {
-//
-// //创建查询实例请求对象并设置参数
-// DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest();
-// return null;
-// }
+// @Autowired
+// private RedisService redisService;
@Override
public void run(ApplicationArguments args) throws Exception {
- log.info("===============>开始批量创建实例");
- creatInstance();
+ List list;
+ try{
+ log.info("开始创建实例");
+ list =aliYunEcsService.generateInstance(aliProperties.getAmount());
+ } catch (Exception e) {
+ log.info("创建实例失败");
+ throw new RuntimeException(e);
+ }
+ log.info("创建实例成功");
+// redisService.setCacheList("instanceIds",list);
+ try{
+ Thread.sleep(6000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ List aliInstances = aliYunEcsService.selectInstance(list);
+ log.info("查询实例信息成功:{}",aliInstances);
+ //将查询到的实例信息列表存储到redis中
+// redisService.setCacheList("instanceList",aliInstances);
+ log.info("redis存储成功:{}",aliInstances);
}
}
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/StartInstance.java b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/StartInstance.java
deleted file mode 100644
index c3019bf..0000000
--- a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/ecs/StartInstance.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.muyu.cloud.vehicle.gateway.aliyun.ecs;//// This file is auto-generated, don't edit it. Thanks.
-//package com.muyu.cloud.vehicle.gateway.aliyun.ecs;
-//
-//import com.aliyun.tea.*;
-//
-///**
-// * 启动一台实例
-// */
-//public class StartInstance {
-//
-// /**
-// * description :
-// * 使用AK&SK初始化账号Client
-// * @return Client
-// *
-// * @throws Exception
-// */
-// public static com.aliyun.ecs20140526.Client createClient() throws Exception {
-// // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
-// // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
-// com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
-// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
-// .setAccessKeyId("LTAI5t7Fnx2QLTYLSu9357wP")
-// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
-// .setAccessKeySecret("3LOnydNZ25ytsTGczuSygElx0HJ6nN");
-// // Endpoint 请参考 https://api.aliyun.com/product/Ecs
-// config.endpoint = "ecs.cn-shanghai.aliyuncs.com";
-// return new com.aliyun.ecs20140526.Client(config);
-// }
-//
-// public static void main(String[] args_) throws Exception {
-// java.util.List args = java.util.Arrays.asList(args_);
-// com.aliyun.ecs20140526.Client client = StartInstance.createClient();
-// com.aliyun.ecs20140526.models.StartInstanceRequest startInstanceRequest = new com.aliyun.ecs20140526.models.StartInstanceRequest();
-// com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
-// try {
-// // 复制代码运行请自行打印 API 的返回值
-// client.startInstanceWithOptions(startInstanceRequest, runtime);
-// } catch (TeaException error) {
-// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
-// // 错误 message
-// System.out.println(error.getMessage());
-// // 诊断地址
-// System.out.println(error.getData().get("Recommend"));
-// com.aliyun.teautil.Common.assertAsString(error.message);
-// } catch (Exception _error) {
-// TeaException error = new TeaException(_error.getMessage(), _error);
-// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
-// // 错误 message
-// System.out.println(error.getMessage());
-// // 诊断地址
-// System.out.println(error.getData().get("Recommend"));
-// com.aliyun.teautil.Common.assertAsString(error.message);
-// }
-// }
-//}
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/mapper/VehicleConnectionMapper.java b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/mapper/VehicleConnectionMapper.java
deleted file mode 100644
index b573aa1..0000000
--- a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/mapper/VehicleConnectionMapper.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.muyu.cloud.vehicle.gateway.aliyun.mapper;
-
-import com.muyu.cloud.vehicle.gateway.aliyun.domain.VehicleConnection;
-import com.muyu.cloud.vehicle.gateway.aliyun.domain.req.VehicleConnectionReq;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface VehicleConnectionMapper {
- void addConnect(VehicleConnection vehicleConnection);
-}
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/service/AliYunEcsService.java b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/service/AliYunEcsService.java
new file mode 100644
index 0000000..8fbd658
--- /dev/null
+++ b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/aliyun/service/AliYunEcsService.java
@@ -0,0 +1,194 @@
+package com.muyu.cloud.vehicle.gateway.aliyun.service;
+
+import com.aliyun.ecs20140526.Client;
+import com.aliyun.ecs20140526.models.*;
+import com.aliyun.tea.TeaException;
+import com.aliyun.teautil.models.RuntimeOptions;
+import com.muyu.cloud.vehicle.gateway.config.AliProperties;
+import com.muyu.cloud.vehicle.gateway.domain.AliInstance;
+import com.muyu.common.core.exception.ServiceException;
+import com.muyu.common.redis.service.RedisService;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *ali业务层
+ */
+@Log4j2
+@Service
+public class AliYunEcsService {
+ /**
+ * 阿里云配置
+ */
+ @Autowired
+ private AliProperties aliProperties;
+ /**
+ * 阿里云客户端
+ */
+ @Autowired
+ private Client client;
+ /**
+ * redis缓存
+ */
+// @Autowired
+// private RedisService redisService;
+
+ /**
+ * 生成实例
+ *
+ * @param amount 生成数量
+ * @return 实例id集合
+ */
+ public List generateInstance(Integer amount) {
+// redisService.deleteObject("instanceIds");
+// redisService.deleteObject("instanceList");
+ // 检查生成实例的数量是否有效
+ if (amount == null || amount <= 0) {
+ throw new ServiceException("生成数量不能小于1");
+ }
+
+// 初始化系统盘配置
+ RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk();
+ systemDisk.setSize("20");
+ systemDisk.setCategory("cloud_essd");
+
+// 创建创建实例请求对象并设置参数
+ RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
+ // 设置地域ID
+ .setRegionId(aliProperties.getRegionId())
+ // 设置镜像ID
+ .setImageId(aliProperties.getImageId())
+ // 设置实例规格类型
+ .setInstanceType(aliProperties.getInstanceType())
+ // 设置安全组ID
+ .setSecurityGroupId(aliProperties.getSecurityGroupId())
+ // 设置虚拟交换机ID
+ .setVSwitchId(aliProperties.getSwitchId())
+ // 设置实例名称
+ .setInstanceName("server-mqtt")
+ // 设置付费类型 按量付费
+ .setInstanceChargeType("PostPaid")
+ // 设置系统盘配置
+ .setSystemDisk(systemDisk)
+ // 设置用户名
+ .setHostName("root")
+ // 设置密码
+ .setPassword("@ywt0219")
+ // 设置要创建的实例数量
+ .setAmount(amount)
+ .setInternetChargeType("PayByTraffic")
+ .setInternetMaxBandwidthOut(1);
+
+ // 创建运行时选项对象
+ RuntimeOptions runtimeOptions = new RuntimeOptions();
+
+ // 尝试执行创建实例请求
+ try {
+ // 复制代码运行请自行打印 API 的返回值
+ RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runtimeOptions);
+ if (runInstancesResponse.getStatusCode() != 200) {
+ throw new ServiceException("查询实例状态失败");
+ }
+ log.info("实例创建成功: {}", runInstancesResponse.getBody().getInstanceIdSets().instanceIdSet);
+ RunInstancesResponseBody body = runInstancesResponse.getBody();
+ RunInstancesResponseBody.RunInstancesResponseBodyInstanceIdSets instanceIdSets = body.getInstanceIdSets();
+ return new ArrayList<>(instanceIdSets.instanceIdSet);
+ } catch (Exception error) {
+ log.error("创建阿里云实例报错:[{}]", error.getMessage());
+ throw new ServiceException(error.getMessage());
+ }
+ }
+
+ /**
+ * 根据实例id查询实例信息
+ *
+ * @param instanceIds 实例id集合
+ */
+ public List selectInstance(List instanceIds) throws Exception {
+ // 检查实例ID列表是否为空,如果为空则抛出异常
+ if (instanceIds == null || instanceIds.isEmpty()) {
+ throw new ServiceException("实例id不能为空");
+ }
+ // 创建查询实例的请求对象
+ DescribeInstancesRequest request = new DescribeInstancesRequest()
+ .setRegionId(aliProperties.getRegionId());
+
+ // 创建运行时选项对象,用于配置请求的额外参数
+ RuntimeOptions runtimeOptions = new RuntimeOptions();
+ List aliInstances = new ArrayList<>();
+ try {
+ // 发送请求并获取响应对象
+ DescribeInstancesResponse describeInstancesResponse = client.describeInstancesWithOptions(request, runtimeOptions);
+ // 检查响应状态码,如果为200则表示查询失败,抛出异常
+ if (describeInstancesResponse.getStatusCode() != 200) {
+ throw new ServiceException("查询实例状态失败");
+ }
+ List instance = describeInstancesResponse.getBody().getInstances().getInstance();
+ for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance bodyInstance : instance) {
+ // 实例id
+ String instanceId = bodyInstance.getInstanceId();
+ log.info("实例id为:{}", instanceId);
+ // ip地址
+ String ipAddress = bodyInstance.getPublicIpAddress().getIpAddress().get(0);
+ log.info("实例ip为:{}", ipAddress);
+ // 实例状态
+ String status = bodyInstance.getStatus();
+ log.info("实例状态为:{}", status);
+ AliInstance aliInstance = new AliInstance(instanceId, ipAddress, status);
+ aliInstances.add(aliInstance);
+ }
+ log.info("查询成功");
+ } catch (Exception e) {
+ log.error("查询服务器实例错误:[{}]", e.getMessage(), e);
+ throw new RuntimeException(e);
+ }
+ return aliInstances;
+ }
+
+ /**
+ * 删除实例
+ */
+ public void deleteInstance() throws Exception {
+ DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest();
+ attributeRequest.setRegionId(aliProperties.getRegionId());
+
+ RuntimeOptions runtimeOptions = new RuntimeOptions();
+
+ DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(attributeRequest, runtimeOptions);
+ ArrayList list = new ArrayList<>();
+ DescribeInstancesResponseBody body = instancesWithOptions.getBody();
+ for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.instances.instance) {
+ list.add(instance.getInstanceId());
+ }
+ log.info("list:" + list);
+ DeleteInstancesRequest deleteInstancesRequest = new DeleteInstancesRequest();
+ deleteInstancesRequest.setRegionId(aliProperties.getRegionId())
+ .setDryRun(false)
+ .setForce(true)
+ .setTerminateSubscription(true)
+ .setInstanceId(list);
+ RuntimeOptions runtime = new RuntimeOptions();
+ try {
+ client.deleteInstancesWithOptions(deleteInstancesRequest, runtime);
+ } catch (TeaException error) {
+ // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+ // 错误 message
+ System.out.println(error.getMessage());
+ // 诊断地址
+ System.out.println(error.getData().get("Recommend"));
+ com.aliyun.teautil.Common.assertAsString(error.message);
+ } catch (Exception _error) {
+ TeaException error = new TeaException(_error.getMessage(), _error);
+ // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+ // 错误 message
+ System.out.println(error.getMessage());
+ // 诊断地址
+ System.out.println(error.getData().get("Recommend"));
+ com.aliyun.teautil.Common.assertAsString(error.message);
+ }
+ }
+}
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/config/AliProperties.java b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/config/AliProperties.java
new file mode 100644
index 0000000..32e192a
--- /dev/null
+++ b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/config/AliProperties.java
@@ -0,0 +1,51 @@
+package com.muyu.cloud.vehicle.gateway.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 阿里云配置
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "aliyun")
+public class AliProperties {
+
+ /**
+ * Key
+ */
+ private String accessKeyId;
+ /**
+ * Secret
+ */
+ private String accessKeySecret;
+ /**
+ * 地域
+ */
+ private String endpoint;
+ /**
+ * 地域ID
+ */
+ private String regionId;
+ /**
+ * 镜像ID
+ */
+ private String imageId;
+ /**
+ * 实例规格类型
+ */
+ private String instanceType;
+ /**
+ * 安全组ID
+ */
+ private String securityGroupId;
+ /**
+ * 虚拟交换机ID
+ */
+ private String switchId;
+ /**
+ * 实例数量
+ */
+ private Integer amount;
+}
diff --git a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/config/RedisConfig.java b/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/config/RedisConfig.java
deleted file mode 100644
index 5531036..0000000
--- a/cloud-modules/cloud-modules-vehicle-gateway/src/main/java/com/muyu/cloud/vehicle/gateway/config/RedisConfig.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.muyu.cloud.vehicle.gateway.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-
-/**
- * Redis配置类
- */
-@Configuration
-public class RedisConfig {
-
- @Bean
- public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
- RedisTemplate redisTemplate = new RedisTemplate<>();
- redisTemplate.setConnectionFactory(redisConnectionFactory);
-
- redisTemplate.setKeySerializer(new StringRedisSerializer());
- redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer