diff --git a/cloud-modules/cloud-modules-car-gateway/pom.xml b/cloud-modules/cloud-modules-car-gateway/pom.xml new file mode 100644 index 0000000..cae8849 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/pom.xml @@ -0,0 +1,122 @@ + + 4.0.0 + + com.muyu + cloud-modules + 3.6.3 + + + cloud-modules-car-gateway + jar + + cloud-modules-car-gateway + http://maven.apache.org + + + UTF-8 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + cloud-common-datasource + + + + + com.muyu + cloud-common-datascope + + + + + com.muyu + cloud-common-log + + + + + com.muyu + cloud-common-api-doc + + + + com.muyu + cloud-common-rabbit + + + + com.muyu + cloud-common-core + + + + com.muyu + cloud-modules-car + 3.6.3 + + + + com.aliyun + ecs20140526 + 5.4.0 + + + + org.eclipse.paho + org.eclipse.paho.client.mqttv3 + 1.2.5 + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/CloudCarGatewayApplication.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/CloudCarGatewayApplication.java new file mode 100644 index 0000000..18f97b0 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/CloudCarGatewayApplication.java @@ -0,0 +1,18 @@ +package com.muyu.car; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car + * @Project:cloud-server-8 + * @name:CloudCarGatewayApplication + * @Date:2024/9/29 上午10:50 + */ +@SpringBootApplication +public class CloudCarGatewayApplication { + public static void main(String[] args) { + SpringApplication.run(CloudCarGatewayApplication.class, args); + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/MqttPublishSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/MqttPublishSample.java new file mode 100644 index 0000000..8653fc0 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/MqttPublishSample.java @@ -0,0 +1,50 @@ +package com.muyu.car; + +import org.eclipse.paho.client.mqttv3.*; +import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; + +public class MqttPublishSample { + + public static void main(String[] args) { + + String topic = "vehicle"; + String content = "Message from MqttPublishSample"; + int qos = 2; + String broker = "tcp://120.55.62.0:1883"; + String clientId = "JavaSample"; + + try { + // 第三个参数为空,默认持久化策略 + 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) { + 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(); + } + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/CreateClient.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/CreateClient.java new file mode 100644 index 0000000..1a34ef0 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/CreateClient.java @@ -0,0 +1,35 @@ +package com.muyu.car.instance; + +import org.springframework.stereotype.Component; +/** + * @Author:蓬叁 + * @Package:com.muyu.car.domain + * @Project:cloud-server-8 + * @name:CreateClient + * @Date:2024/9/29 上午10:41 + */ +@Component +public class CreateClient { + + /** + * 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("LTAI5tFtQk1KbwRBXM5pHVWw") + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + .setAccessKeySecret("GLByUZqUqgR600eTpGmfb52ZT93mu9"); + // Endpoint 请参考 https://api.aliyun.com/product/Ecs + config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; + return new com.aliyun.ecs20140526.Client(config); + } + +} + diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/DelInstance.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/DelInstance.java new file mode 100644 index 0000000..8096e16 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/DelInstance.java @@ -0,0 +1,86 @@ +package com.muyu.car.instance; + +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.teautil.models.RuntimeOptions; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car.domain + * @Project:cloud-server-8 + * @name:DelInstance + * @Date:2024/9/29 上午10:42 + */ +@Log4j2 +@Component +@Tag(name = "程序停止删除实例") +public class DelInstance implements DisposableBean { + + public static void delInstance() throws Exception { + // 创建ECS客户端对象,用于后续调用ECS相关API + com.aliyun.ecs20140526.Client client = CreateClient.createClient(); + DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest() + .setRegionId("cn-hangzhou"); + //创建运行时选择对象,用于配置运行时的选项参数 + 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()); + } + log.info("Instance IDs: " + list); + // 创建删除实例请求对象,并设置请求参数 + com.aliyun.ecs20140526.models.DeleteInstancesRequest deleteInstancesRequest = new com.aliyun.ecs20140526.models.DeleteInstancesRequest() + //设置地域ID,指定删除实例的地域 + .setRegionId("cn-hangzhou") + // 设置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("===============>开始执行删除实例方法"); + delInstance(); + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/GenerateInstance.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/GenerateInstance.java new file mode 100644 index 0000000..712b257 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/GenerateInstance.java @@ -0,0 +1,92 @@ +package com.muyu.car.instance; + +import com.aliyun.tea.TeaException; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.log4j.Log4j2; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; +/** + * @Author:蓬叁 + * @Package:com.muyu.car.domain + * @Project:cloud-server-8 + * @name:GenerateInstance + * @Date:2024/9/29 上午10:42 + */ +@Component +@Log4j2 +@Tag(name = "启动时创建实例") +public class GenerateInstance implements ApplicationRunner { + + /** + * 启动自动创建实例 + * @throws Exception + */ + public static void generateInstance() throws Exception { + + // 创建ECS客户端对象,用于后续调用ECS相关API + com.aliyun.ecs20140526.Client client = CreateClient.createClient(); + + com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk() + .setSize("40") + .setCategory("cloud_essd"); + com.aliyun.ecs20140526.models.RunInstancesRequest runInstancesRequest = new com.aliyun.ecs20140526.models.RunInstancesRequest() + // 设置地域ID + .setRegionId("cn-hangzhou") + // 设置镜像ID + .setImageId("m-bp154fkbdlkjc1i3ku01") + // 设置实例类型 + .setInstanceType("ecs.t6-c1m1.large") + // 设置安全组ID + .setSecurityGroupId("sg-bp1a7fk8js5pn3fw9p2m") + // 设置虚拟交换机ID + .setVSwitchId("vsw-bp193np7r01vssqxhh24e") + // 设置实例名称 + .setInstanceName("server-mqtt") + // 设置实例付费类型为后付费按量付费 + .setInstanceChargeType("PostPaid") + // 设置互联网最大出带宽为1 Mbps + .setInternetMaxBandwidthOut(1) + // 设置系统盘配置 + .setSystemDisk(systemDisk) + // 设置主机名 + .setHostName("root") + // 设置实例密码 + .setPassword("EightGroup123.") + // 设置创建实例的数量 + .setAmount(1); + + + + 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 { + generateInstance(); + System.out.println("创建实例成功"); + } + + + +} + diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/banner.txt b/cloud-modules/cloud-modules-car-gateway/src/main/resources/banner.txt new file mode 100644 index 0000000..0dd5eee --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/banner.txt @@ -0,0 +1,2 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/dev.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/dev.xml new file mode 100644 index 0000000..3126c46 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/dev.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/prod.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/prod.xml new file mode 100644 index 0000000..8f5aff5 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/prod.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/test.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/test.xml new file mode 100644 index 0000000..8f5aff5 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/test.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + +