fix():优化代码

dev.gateway
Li HD 2024-09-30 20:53:29 +08:00
parent 6eb46f53ae
commit 9952d8b24d
32 changed files with 613 additions and 298 deletions

View File

@ -5,9 +5,8 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>cloud-server</artifactId>
<artifactId>cloud-modules</artifactId>
<version>3.6.3</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<artifactId>enterpise-client</artifactId>

View File

@ -5,9 +5,8 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>cloud-server</artifactId>
<artifactId>cloud-modules</artifactId>
<version>3.6.3</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<artifactId>enterpise-common</artifactId>

View File

@ -5,9 +5,8 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>cloud-server</artifactId>
<artifactId>cloud-modules</artifactId>
<version>3.6.3</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<artifactId>enterpise-remote</artifactId>

View File

@ -5,9 +5,8 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>cloud-server</artifactId>
<artifactId>cloud-modules</artifactId>
<version>3.6.3</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<artifactId>enterpise-service</artifactId>

View File

@ -13,7 +13,7 @@
<packaging>pom</packaging>
<description>
cloud-modules-enterprise
cloud-modules-enterprise闫🐕和🐂鹏
</description>
<properties>

View File

@ -9,10 +9,10 @@
<version>3.6.3</version>
</parent>
<artifactId>cloud-modules-vehicleGateway</artifactId>
<artifactId>cloud-modules-vehicle-gateway</artifactId>
<description>
cloud-modules-vehicleGateway车辆网关模块
cloud-modules-vehicle-gateway车辆网关模块
</description>
<properties>

View File

@ -0,0 +1,108 @@
//package com.muyu.vehicle.gateway;
//
//import com.aliyun.ecs20140526.models.DescribeInstancesRequest;
//import com.aliyun.ecs20140526.models.DescribeInstancesResponse;
//import com.aliyun.ecs20140526.models.DescribeInstancesResponseBody;
//import com.aliyun.tea.TeaException;
//import com.aliyun.teautil.models.RuntimeOptions;
//import lombok.extern.log4j.Log4j2;
//import org.springframework.beans.factory.DisposableBean;
//import org.springframework.stereotype.Component;
//
//import java.util.ArrayList;
//
///**
// * 清除阿里云ECS实例
// * @ClassName ClearInstance
// * @author LiHD
// * @Date 2024/9/28 22:29
// */
//@Component
//@Log4j2
//public class ClearInstance implements DisposableBean {
//
// /**
// * <b>description</b> :
// * <p>使用AK&amp;SK初始化账号Client</p>
// * @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("LTAI5tM4LSerzWQ9wUPXgybq")
// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// .setAccessKeySecret("hkiPr0QwkKMZauhXucgg1SDriXUW0Q");
// // Endpoint 请参考 https://api.aliyun.com/product/Ecs
// config.endpoint = "ecs.cn-beijing.aliyuncs.com";
// return new com.aliyun.ecs20140526.Client(config);
// }
//
// public static void clearInstance() throws Exception {
//
// // 创建ECS客户端对象用于后续调用ECS相关API
// com.aliyun.ecs20140526.Client client = ClearInstance.createClient();
//
// DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest()
// .setRegionId("cn-beijing");
//
// //创建运行时选择对象,用于配置运行时的选项参数
// RuntimeOptions runtimeOptions = new RuntimeOptions();
//
// //获取实例列表
// DescribeInstancesResponse describeInstancesResponse = client.describeInstancesWithOptions(describeInstancesRequest, runtimeOptions);
//
// //提取实例ID集合
// ArrayList<String> list = new ArrayList<>();
// DescribeInstancesResponseBody body = describeInstancesResponse.getBody();
//
// for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()) {
// list.add(instance.getInstanceId());
// }
// log.info("Instance IDs: " + list);
// // 创建删除实例请求对象,并设置请求参数
// com.aliyun.ecs20140526.models.DeleteInstancesRequest deleteInstancesRequest = new com.aliyun.ecs20140526.models.DeleteInstancesRequest()
// // 设置地域ID指定删除实例的地域
// .setRegionId("cn-beijing")
// // 设置DryRun为true用于验证请求是否可以成功但不实际执行删除操作
// .setDryRun(false)
// // 设置Force为true表示即使实例有正在运行的任务也强制删除实例
// .setForce(true)
// // 设置TerminateSubscription为true表示删除按订阅付费的实例时终止订阅
// .setTerminateSubscription(true)
// .setInstanceId(list);
//
// // 创建运行时选项对象,用于配置运行时的选项参数
// com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// try {
// // 复制代码运行请自行打印 API 的返回值
// 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);
// }
// }
//
//
// @Override
// public void destroy() throws Exception {
// log.info("开始执行删除实例方法");
// clearInstance();
// log.info("删除实例方法执行完毕");
// }
//}

View File

@ -0,0 +1,108 @@
//package com.muyu.vehicle.gateway;
//
//import com.aliyun.ecs20140526.models.RunInstancesResponse;
//import com.aliyun.ecs20140526.models.RunInstancesResponseBody;
//import com.aliyun.tea.TeaException;
//import lombok.extern.log4j.Log4j2;
//import org.springframework.boot.ApplicationArguments;
//import org.springframework.boot.ApplicationRunner;
//import org.springframework.stereotype.Component;
//
//import java.util.ArrayList;
//
///**
// * 创建阿里云ECS实例
// * @className Sample
// * @author LiHD
// * @date 2024/9/28 19:02
// */
//@Component
//@Log4j2
//public class CreateInstance implements ApplicationRunner{
//
// /**
// * <b>description</b> :
// * <p>使用AK&amp;SK初始化账号Client</p>
// * @return Client
// *
// * @throws Exception
// */
// public static com.aliyun.ecs20140526.Client createClient() throws Exception {
// // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
// .setAccessKeyId("LTAI5tM4LSerzWQ9wUPXgybq")
// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// .setAccessKeySecret("hkiPr0QwkKMZauhXucgg1SDriXUW0Q");
// // Endpoint 请参考 https://api.aliyun.com/product/Ecs
// config.endpoint = "ecs.cn-beijing.aliyuncs.com";
// return new com.aliyun.ecs20140526.Client(config);
// }
//
// /**
// * 本程序的入口点
// * 主要功能是创建阿里云ECS实例
// *
// * @throws Exception 如果执行过程中发生错误则抛出异常
// */
// public static void sample() throws Exception {
//
// // 创建阿里云ECS客户端
// com.aliyun.ecs20140526.Client client = CreateInstance.createClient();
//
// // 配置系统盘参数
// com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk()
// .setSize("40") // 设置系统盘大小为40GB
// .setCategory("cloud_essd"); // 设置系统盘类型为cloud_essd
//
// // 创建创建实例请求对象并设置参数
// com.aliyun.ecs20140526.models.RunInstancesRequest runInstancesRequest = new com.aliyun.ecs20140526.models.RunInstancesRequest()
// .setRegionId("cn-beijing") // 设置地域ID
// .setImageId("m-2ze801i45fclmf1qwes5") // 设置镜像ID
// .setInstanceType("ecs.e-c1m1.large") // 设置实例类型
// .setSecurityGroupId("sg-2ze63acc0bas9vjm5gtv") // 设置安全组ID
// .setVSwitchId("vsw-2ze028qk4xpwk3i0ggket") // 设置虚拟交换机ID
// .setInstanceName("server-mqtt") // 设置实例名称
// .setInstanceChargeType("PostPaid") // 设置实例付费类型为后付费按量付费
// .setSystemDisk(systemDisk) // 设置系统盘配置
// .setHostName("root") // 设置主机名
// .setPassword("Lhd.123456") // 设置实例密码
// .setAmount(2) // 设置创建实例的数量
// .setInternetChargeType("PayByTraffic") // 设置互联网计费类型为按流量计费
// .setInternetMaxBandwidthOut(5); // 设置最大出带宽为5Mbps
//
// // 创建运行时选项对象
// com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
//
// // 尝试执行创建实例请求
// try {
// // 复制代码运行请自行打印 API 的返回值
// RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runtime);
// RunInstancesResponseBody body = runInstancesResponse.getBody();
// ArrayList<String> list = new ArrayList<>(body.getInstanceIdSets().getInstanceIdSet());
// log.info("实例ID{}", list);
// } catch (TeaException error) {
// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// // 错误 message
// log.info(error.getMessage());
// // 诊断地址
// log.info(error.getData().get("Recommend"));
// com.aliyun.teautil.Common.assertAsString(error.message);
// } catch (Exception _error) {
// TeaException error = new TeaException(_error.getMessage(), _error);
// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// // 错误 message
// log.info(error.getMessage());
// // 诊断地址
// log.info(error.getData().get("Recommend"));
// com.aliyun.teautil.Common.assertAsString(error.message);
// }
// }
//
// @Override
// public void run(ApplicationArguments args) throws Exception {
// log.info("开始执行创建实例方法");
// sample();
// log.info("创建实例方法执行完毕");
// }
//}

View File

@ -0,0 +1,56 @@
//package com.muyu.vehicle.gateway;
//
//import lombok.extern.log4j.Log4j2;
//import lombok.extern.slf4j.Slf4j;
//import org.eclipse.paho.client.mqttv3.*;
//
//@Log4j2
//@Slf4j
//public class MqttPublishSample {
//
// public static void main(String[] args) {
//
// // 定义一个用于MQTT消息发布的示例程序
// String topic = "vehicleGateway";
// String content = "Message from MqttPublishSample";
// int qos = 2;
// String broker = "tcp://123.57.152.124:1883";
// String clientId = "JavaSample";
//
// try {
// // 创建MQTT客户端并连接到指定的broker
// MqttClient sampleClient = new MqttClient(broker, clientId);
// MqttConnectOptions connOpts = new MqttConnectOptions();
// connOpts.setCleanSession(true);
// System.out.println("Connecting to broker: "+broker);
// sampleClient.connect(connOpts);
// sampleClient.subscribe(topic,0);
// // 设置回调处理
// sampleClient.setCallback(new MqttCallback() {
// @Override
// public void connectionLost(Throwable throwable) {
// // 连接丢失的处理
// }
//
// @Override
// public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
// // 消息到达的处理
// System.out.println(new String(mqttMessage.getPayload()));
// }
//
// @Override
// public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
// // 消息发送完成的处理
// }
// });
// } catch(MqttException me) {
// // 处理MQTT异常
// System.out.println("reason "+me.getReasonCode());
// System.out.println("msg "+me.getMessage());
// System.out.println("loc "+me.getLocalizedMessage());
// System.out.println("cause "+me.getCause());
// System.out.println("excep "+me);
// me.printStackTrace();
// }
// }
//}

View File

@ -0,0 +1,44 @@
package com.muyu.vehicle.gateway.aliyun.controller;
import com.muyu.common.core.web.controller.BaseController;
import com.muyu.vehicle.gateway.aliyun.service.InstanceService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* ECS
*
* @author LiHD
* @ClassName InstanceController
* @Date 2024/9/29 22:04
*/
@Log4j2
@RestController
@RequestMapping("/instance")
public class InstanceController {
@Autowired
private InstanceService instanceService;
/**
*
*/
@PostConstruct
public void createInstance(){
instanceService.createInstance();
}
/**
*
*/
@PreDestroy
public void cleanInstance(){
instanceService.cleanInstance();
}
}

View File

@ -0,0 +1,27 @@
package com.muyu.vehicle.gateway.aliyun.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ECS
*
* @author LiHD
* @ClassName Instance
* @Date 2024/9/29 22:04
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@TableName("instance")
public class Instance {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
}

View File

@ -0,0 +1,16 @@
package com.muyu.vehicle.gateway.aliyun.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.vehicle.gateway.aliyun.domain.Instance;
import org.apache.ibatis.annotations.Mapper;
/**
* ECS
*
* @author LiHD
* @ClassName InstanceMapper
* @Date 2024/9/29 20:19
*/
@Mapper
public interface InstanceMapper {
}

View File

@ -0,0 +1,25 @@
package com.muyu.vehicle.gateway.aliyun.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.vehicle.gateway.aliyun.domain.Instance;
import org.apache.catalina.Service;
/**
* ECS
*
* @author LiHD
* @ClassName InstanceService
* @Date 2024/9/29 20:22
*/
public interface InstanceService {
/**
* ECS
*/
void createInstance();
/**
* ECS
*/
void cleanInstance();
}

View File

@ -0,0 +1,199 @@
package com.muyu.vehicle.gateway.aliyun.service.impl;
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.*;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.models.RuntimeOptions;
import com.muyu.vehicle.gateway.aliyun.mapper.InstanceMapper;
import com.muyu.vehicle.gateway.aliyun.service.InstanceService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
/**
* ECS
*
* @author LiHD
* @ClassName InstanceServiceImpl
* @Date 2024/9/29 20:23
*/
@Log4j2
@Service
public class InstanceServiceImpl implements InstanceService {
@Autowired
private InstanceMapper instanceMapper;
// 阿里云ECS相关参数
private final static String AccessKeyId = "LTAI5tM4LSerzWQ9wUPXgybq"; // 请替换成您的 AccessKeyId
private final static String AccessKeySecret = "hkiPr0QwkKMZauhXucgg1SDriXUW0Q"; // 请替换成您的 AccessKeySecret
private final static String Endpoint = "ecs.cn-beijing.aliyuncs.com"; // 请替换成您的访问域名
private final static String Size = "40"; // 请替换成您的实例系统盘大小单位为GB
private final static String Category = "cloud_essd"; // 请替换成您的实例系统盘类型可选值cloud_efficiency、cloud_ssd、cloud_essd
private final static String RegionId = "cn-beijing"; // 请替换成您的实例所在地域ID
private final static String ImageId = "m-2ze801i45fclmf1qwes5"; // 请替换成您的实例镜像ID
private final static String InstanceType = "ecs.e-c1m1.large"; // 请替换成您的实例类型
private final static String SecurityGroupId = "sg-2ze63acc0bas9vjm5gtv"; // 请替换成您的安全组ID
private final static String VSwitchId = "vsw-2ze028qk4xpwk3i0ggket"; // 请替换成您的虚拟交换机ID
private final static String InstanceName = "server-mqtt"; // 请替换成您的实例名称
private final static String InstanceChargeType = "PostPaid"; // 请替换成您的实例付费类型可选值PrePaid、PostPaid
private final static String HostName = "root"; // 请替换成您的主机名
private final static String Password = "Lhd.123456"; // 请替换成您的实例密码
private final static Integer Amount = 1; // 请替换成您要创建的实例数量
private final static String InternetChargeType = "PayByTraffic"; // 请替换成您的实例网络计费类型可选值PayByBandwidth、PayByTraffic
private final static Integer InternetMaxBandwidthOut = 5; // 请替换成您的实例网络出带宽单位为Mbps
/**
* description
* AK&amp;SKClient
* @returnClient
* @throws Exception
*/
public com.aliyun.ecs20140526.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(AccessKeyId)
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(AccessKeySecret);
// Endpoint 请参考 https://api.aliyun.com/product/Ecs
config.endpoint = Endpoint;
return new com.aliyun.ecs20140526.Client(config);
}
/**
* ECS
*/
@Override
public void createInstance(){
log.info("创建ECS实例");
// 创建阿里云ECS客户端
Client client = null;
try {
client = this.createClient();
} catch (Exception e) {
throw new RuntimeException(e);
}
// 配置系统盘参数
com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk =
new com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk()
.setSize(Size) // 设置系统盘大小
.setCategory(Category);// 设置系统盘类型
// 创建创建实例请求对象并设置参数
com.aliyun.ecs20140526.models.RunInstancesRequest runInstancesRequest =
new com.aliyun.ecs20140526.models.RunInstancesRequest()
.setRegionId(RegionId) // 设置实例所在地域ID
.setImageId(ImageId) // 设置实例镜像ID
.setInstanceType(InstanceType) // 设置实例类型
.setSecurityGroupId(SecurityGroupId) // 设置安全组ID
.setVSwitchId(VSwitchId) // 设置虚拟交换机ID
.setInstanceName(InstanceName) // 设置实例名称
.setInstanceChargeType(InstanceChargeType) // 设置实例付费类型为后付费按量付费
.setSystemDisk(systemDisk) // 设置系统盘配置
.setHostName(HostName) // 设置主机名
.setPassword(Password) // 设置实例密码
.setAmount(Amount) // 设置创建实例的数量
.setInternetChargeType(InternetChargeType) // 设置互联网计费类型为按流量计费
.setInternetMaxBandwidthOut(InternetMaxBandwidthOut); // 设置最大出带宽为5Mbps
// 创建运行时选项对象
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 尝试执行创建实例请求
try {
// 复制代码运行请自行打印 API 的返回值
RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runtime);
RunInstancesResponseBody body = runInstancesResponse.getBody();
ArrayList<String> list = new ArrayList<>(body.getInstanceIdSets().getInstanceIdSet());
log.info("创建的实例ID{}", list);
} catch (TeaException error) {
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
log.info(error.getMessage());
// 诊断地址
log.info(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
log.info(error.getMessage());
// 诊断地址
log.info(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
/**
* ECS
*/
@Override
public void cleanInstance() {
log.info("清理ECS实例");
// 创建ECS客户端对象用于后续调用ECS相关API
Client client = null;
try {
client = this.createClient();
} catch (Exception e) {
throw new RuntimeException(e);
}
DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest()
.setRegionId(RegionId);
//创建运行时选择对象,用于配置运行时的选项参数
RuntimeOptions runtimeOptions = new RuntimeOptions();
//获取实例列表
DescribeInstancesResponse describeInstancesResponse = null;
try {
describeInstancesResponse = client.describeInstancesWithOptions(describeInstancesRequest, runtimeOptions);
} catch (Exception e) {
throw new RuntimeException(e);
}
//提取实例ID集合
ArrayList<String> list = new ArrayList<>();
DescribeInstancesResponseBody body = describeInstancesResponse.getBody();
for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()) {
list.add(instance.getInstanceId());
}
log.info("清除的实例ID{}", list);
// 创建删除实例请求对象,并设置请求参数
com.aliyun.ecs20140526.models.DeleteInstancesRequest deleteInstancesRequest = new com.aliyun.ecs20140526.models.DeleteInstancesRequest()
// 设置地域ID指定删除实例的地域
.setRegionId(RegionId)
// 设置DryRun为true用于验证请求是否可以成功但不实际执行删除操作
.setDryRun(false)
// 设置Force为true表示即使实例有正在运行的任务也强制删除实例
.setForce(true)
// 设置TerminateSubscription为true表示删除按订阅付费的实例时终止订阅
.setTerminateSubscription(true)
.setInstanceId(list);
// 创建运行时选项对象,用于配置运行时的选项参数
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 复制代码运行请自行打印 API 的返回值
DeleteInstancesResponse deleteInstancesResponse = 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);
}
}
}

View File

@ -1,9 +1,9 @@
package com.muyu.vehicleGateway.vehicle;
package com.muyu.vehicle.gateway.vehicle;
import com.muyu.vehicleGateway.vehicle.model.VehicleData;
import com.muyu.vehicleGateway.vehicle.thread.VehicleThread;
import com.muyu.vehicleGateway.web.domain.VehicleInfo;
import com.muyu.vehicleGateway.web.domain.model.PositionModel;
import com.muyu.vehicle.gateway.vehicle.model.VehicleData;
import com.muyu.vehicle.gateway.vehicle.thread.VehicleThread;
import com.muyu.vehicle.gateway.web.domain.VehicleInfo;
import com.muyu.vehicle.gateway.web.domain.model.PositionModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

View File

@ -1,7 +1,7 @@
package com.muyu.vehicleGateway.vehicle.model;
package com.muyu.vehicle.gateway.vehicle.model;
import com.muyu.vehicleGateway.web.domain.VehicleInfo;
import com.muyu.vehicleGateway.web.util.VehicleUtils;
import com.muyu.vehicle.gateway.web.domain.VehicleInfo;
import com.muyu.vehicle.gateway.web.util.VehicleUtils;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

View File

@ -1,6 +1,6 @@
package com.muyu.vehicleGateway.vehicle.thread;
package com.muyu.vehicle.gateway.vehicle.thread;
import com.muyu.vehicleGateway.vehicle.VehicleInstance;
import com.muyu.vehicle.gateway.vehicle.VehicleInstance;
import lombok.Data;
import lombok.extern.log4j.Log4j2;

View File

@ -1,9 +1,9 @@
package com.muyu.vehicleGateway.web.domain;
package com.muyu.vehicle.gateway.web.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.muyu.vehicleGateway.vehicle.VehicleInstance;
import com.muyu.vehicleGateway.vehicle.model.VehicleData;
import com.muyu.vehicleGateway.web.util.VehicleUtils;
import com.muyu.vehicle.gateway.vehicle.VehicleInstance;
import com.muyu.vehicle.gateway.vehicle.model.VehicleData;
import com.muyu.vehicle.gateway.web.util.VehicleUtils;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.muyu.vehicleGateway.web.domain.model;
package com.muyu.vehicle.gateway.web.domain.model;
import lombok.AllArgsConstructor;
import lombok.Builder;

View File

@ -1,7 +1,7 @@
package com.muyu.vehicleGateway.web.mapper;
package com.muyu.vehicle.gateway.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.vehicleGateway.web.domain.VehicleInfo;
import com.muyu.vehicle.gateway.web.domain.VehicleInfo;
import org.apache.ibatis.annotations.Mapper;
/**

View File

@ -1,8 +1,8 @@
package com.muyu.vehicleGateway.web.service.impl;
package com.muyu.vehicle.gateway.web.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.vehicleGateway.web.domain.VehicleInfo;
import com.muyu.vehicleGateway.web.mapper.VehicleInfoMapper;
import com.muyu.vehicle.gateway.web.domain.VehicleInfo;
import com.muyu.vehicle.gateway.web.mapper.VehicleInfoMapper;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

View File

@ -1,6 +1,6 @@
package com.muyu.vehicleGateway.web.util;
package com.muyu.vehicle.gateway.web.util;
import com.muyu.vehicleGateway.web.domain.model.PositionModel;
import com.muyu.vehicle.gateway.web.domain.model.PositionModel;
import java.math.BigDecimal;
import java.math.RoundingMode;

View File

@ -1,108 +0,0 @@
package com.muyu.vehicleGateway;
import com.aliyun.ecs20140526.models.DescribeInstancesRequest;
import com.aliyun.ecs20140526.models.DescribeInstancesResponse;
import com.aliyun.ecs20140526.models.DescribeInstancesResponseBody;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.models.RuntimeOptions;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
/**
* ECS
* @ClassName ClearInstance
* @author LiHD
* @Date 2024/9/28 22:29
*/
@Component
@Log4j2
public class ClearInstance implements DisposableBean {
/**
* <b>description</b> :
* <p>使AK&amp;SKClient</p>
* @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("LTAI5tM4LSerzWQ9wUPXgybq")
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret("hkiPr0QwkKMZauhXucgg1SDriXUW0Q");
// Endpoint 请参考 https://api.aliyun.com/product/Ecs
config.endpoint = "ecs.cn-beijing.aliyuncs.com";
return new com.aliyun.ecs20140526.Client(config);
}
public static void clearInstance() throws Exception {
// 创建ECS客户端对象用于后续调用ECS相关API
com.aliyun.ecs20140526.Client client = ClearInstance.createClient();
DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest()
.setRegionId("cn-beijing");
//创建运行时选择对象,用于配置运行时的选项参数
RuntimeOptions runtimeOptions = new RuntimeOptions();
//获取实例列表
DescribeInstancesResponse describeInstancesResponse = client.describeInstancesWithOptions(describeInstancesRequest, runtimeOptions);
//提取实例ID集合
ArrayList<String> list = new ArrayList<>();
DescribeInstancesResponseBody body = describeInstancesResponse.getBody();
for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()) {
list.add(instance.getInstanceId());
}
log.info("Instance IDs: " + list);
// 创建删除实例请求对象,并设置请求参数
com.aliyun.ecs20140526.models.DeleteInstancesRequest deleteInstancesRequest = new com.aliyun.ecs20140526.models.DeleteInstancesRequest()
// 设置地域ID指定删除实例的地域
.setRegionId("cn-beijing")
// 设置DryRun为true用于验证请求是否可以成功但不实际执行删除操作
.setDryRun(false)
// 设置Force为true表示即使实例有正在运行的任务也强制删除实例
.setForce(true)
// 设置TerminateSubscription为true表示删除按订阅付费的实例时终止订阅
.setTerminateSubscription(true)
.setInstanceId(list);
// 创建运行时选项对象,用于配置运行时的选项参数
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 复制代码运行请自行打印 API 的返回值
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);
}
}
@Override
public void destroy() throws Exception {
log.info("开始执行删除实例方法");
clearInstance();
log.info("删除实例方法执行完毕");
}
}

View File

@ -1,101 +0,0 @@
package com.muyu.vehicleGateway;
import com.aliyun.tea.TeaException;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
/**
* ECS
* @className Sample
* @author LiHD
* @date 2024/9/28 19:02
*/
@Component
@Log4j2
public class CreateInstance implements ApplicationRunner{
/**
* <b>description</b> :
* <p>使AK&amp;SKClient</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.ecs20140526.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId("LTAI5tM4LSerzWQ9wUPXgybq")
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret("hkiPr0QwkKMZauhXucgg1SDriXUW0Q");
// Endpoint 请参考 https://api.aliyun.com/product/Ecs
config.endpoint = "ecs.cn-beijing.aliyuncs.com";
return new com.aliyun.ecs20140526.Client(config);
}
/**
*
* ECS
*
* @throws Exception
*/
public static void sample() throws Exception {
// 创建阿里云ECS客户端
com.aliyun.ecs20140526.Client client = CreateInstance.createClient();
// 配置系统盘参数
com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk()
.setSize("40") // 设置系统盘大小为40GB
.setCategory("cloud_essd"); // 设置系统盘类型为cloud_essd
// 创建创建实例请求对象并设置参数
com.aliyun.ecs20140526.models.RunInstancesRequest runInstancesRequest = new com.aliyun.ecs20140526.models.RunInstancesRequest()
.setRegionId("cn-beijing") // 设置地域ID
.setImageId("m-2ze801i45fclmf1qwes5") // 设置镜像ID
.setInstanceType("ecs.e-c1m1.large") // 设置实例类型
.setSecurityGroupId("sg-2ze63acc0bas9vjm5gtv") // 设置安全组ID
.setVSwitchId("vsw-2ze028qk4xpwk3i0ggket") // 设置虚拟交换机ID
.setInstanceName("server-mqtt") // 设置实例名称
.setInstanceChargeType("PostPaid") // 设置实例付费类型为后付费按量付费
.setSystemDisk(systemDisk) // 设置系统盘配置
.setHostName("root") // 设置主机名
.setPassword("Lhd.123456") // 设置实例密码
.setAmount(1) // 设置创建实例的数量
.setInternetChargeType("PayByTraffic") // 设置互联网计费类型为按流量计费
.setInternetMaxBandwidthOut(5); // 设置最大出带宽为5Mbps
// 创建运行时选项对象
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 尝试执行创建实例请求
try {
// 复制代码运行请自行打印 API 的返回值
client.runInstancesWithOptions(runInstancesRequest, 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);
}
}
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("开始执行创建实例方法");
sample();
log.info("创建实例方法执行完毕");
}
}

View File

@ -1,56 +0,0 @@
package com.muyu.vehicleGateway;
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.*;
@Log4j2
@Slf4j
public class MqttPublishSample {
public static void main(String[] args) {
// 定义一个用于MQTT消息发布的示例程序
String topic = "vehicleGateway";
String content = "Message from MqttPublishSample";
int qos = 2;
String broker = "tcp://123.57.152.124:1883";
String clientId = "JavaSample";
try {
// 创建MQTT客户端并连接到指定的broker
MqttClient sampleClient = new MqttClient(broker, clientId);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
System.out.println("Connecting to broker: "+broker);
sampleClient.connect(connOpts);
sampleClient.subscribe(topic,0);
// 设置回调处理
sampleClient.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable throwable) {
// 连接丢失的处理
}
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
// 消息到达的处理
System.out.println(new String(mqttMessage.getPayload()));
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
// 消息发送完成的处理
}
});
} catch(MqttException me) {
// 处理MQTT异常
System.out.println("reason "+me.getReasonCode());
System.out.println("msg "+me.getMessage());
System.out.println("loc "+me.getLocalizedMessage());
System.out.println("cause "+me.getCause());
System.out.println("excep "+me);
me.printStackTrace();
}
}
}

View File

@ -14,6 +14,7 @@
<module>cloud-modules-file</module>
<module>cloud-vx</module>
<module>cloud-modules-enterprise</module>
<module>cloud-modules-vehicle-gateway</module>
</modules>
<artifactId>cloud-modules</artifactId>