From 723cb6556d9d9811933451532069611db54fad15 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com>
Date: Sun, 29 Sep 2024 09:06:47 +0800
Subject: [PATCH 01/14] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E9=98=BF=E9=87=8C?=
=?UTF-8?q?=E4=BA=91=E7=9A=84RunInstances=E6=8E=A5=E5=8F=A3=E5=88=9B?=
=?UTF-8?q?=E5=BB=BA=E5=AE=9E=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
cloud-auth/src/main/resources/bootstrap.yml | 2 +-
cloud-common/cloud-common-core/pom.xml | 5 +
.../muyu/common/core/utils/ip/IpUtils.java | 6 +-
.../constents/DatasourceContent.java | 2 +-
.../src/main/resources/bootstrap.yml | 4 +-
.../src/main/resources/bootstrap.yml | 4 +-
.../cloud-modules-car-gateway/pom.xml | 114 +++++++++++++++++
.../cargateway/CarGatewayApplication.java | 23 ++++
.../cargatewaytest/DeleteSample.java | 89 +++++++++++++
.../cargateway/cargatewaytest/Sample.java | 107 ++++++++++++++++
.../CarOneClickOperationController.java | 27 ++++
.../cargateway/controller/TestController.java | 64 ++++++++++
.../cargateway/domain/AliServerConfig.java | 46 +++++++
.../muyu/cargateway/domain/ServerConfig.java | 58 +++++++++
.../cargateway/domain/model/TaskModel.java | 87 +++++++++++++
.../domain/properties/MqttProperties.java | 45 +++++++
.../domain/resp/AliServerConfig.java | 37 ++++++
.../mapper/CarOneClickOperationMapper.java | 15 +++
.../service/CarOneClickOperationService.java | 14 ++
.../Impl/CarOneClickOperationServiceImpl.java | 18 +++
.../muyu/cargateway/test/MqttPublisher.java | 60 +++++++++
.../java/com/muyu/cargateway/test/Sample.java | 120 ++++++++++++++++++
.../src/main/resources/banner.txt | 2 +
.../src/main/resources/bootstrap.yml | 60 +++++++++
.../src/main/resources/logback/dev.xml | 74 +++++++++++
.../src/main/resources/logback/prod.xml | 81 ++++++++++++
.../src/main/resources/logback/test.xml | 81 ++++++++++++
.../src/main/resources/bootstrap.yml | 2 +-
.../src/main/resources/bootstrap.yml | 2 +-
.../src/main/resources/bootstrap.yml | 2 +-
.../src/main/resources/bootstrap.yml | 2 +-
.../src/main/resources/bootstrap.yml | 2 +-
.../src/main/resources/bootstrap.yml | 2 +-
cloud-modules/pom.xml | 1 +
.../src/main/resources/bootstrap.yml | 2 +-
init-file/cloud-system.sql | 4 +-
36 files changed, 1246 insertions(+), 18 deletions(-)
create mode 100644 cloud-modules/cloud-modules-car-gateway/pom.xml
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliServerConfig.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ServerConfig.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/TaskModel.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/properties/MqttProperties.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/resp/AliServerConfig.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/banner.txt
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/dev.xml
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/prod.xml
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/test.xml
diff --git a/cloud-auth/src/main/resources/bootstrap.yml b/cloud-auth/src/main/resources/bootstrap.yml
index ce1fb2d..910ec21 100644
--- a/cloud-auth/src/main/resources/bootstrap.yml
+++ b/cloud-auth/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 127.0.0.1:8848
+ addr: 106.54.193.225:8848
user-name: nacos
password: nacos
namespace: one-saas
diff --git a/cloud-common/cloud-common-core/pom.xml b/cloud-common/cloud-common-core/pom.xml
index be06f0a..9654ee7 100644
--- a/cloud-common/cloud-common-core/pom.xml
+++ b/cloud-common/cloud-common-core/pom.xml
@@ -168,6 +168,11 @@
cn.hutool
hutool-all
+
+ org.eclipse.paho
+ org.eclipse.paho.client.mqttv3
+ 1.2.2
+
diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java
index e750583..297243e 100644
--- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java
+++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java
@@ -58,7 +58,7 @@ public class IpUtils {
ip = request.getRemoteAddr();
}
- return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip);
+ return "0:0:0:0:0:0:0:1".equals(ip) ? "106.54.193.225" : getMultistageReverseProxyIp(ip);
}
/**
@@ -70,7 +70,7 @@ public class IpUtils {
*/
public static boolean internalIp (String ip) {
byte[] addr = textToNumericFormatV4(ip);
- return internalIp(addr) || "127.0.0.1".equals(ip);
+ return internalIp(addr) || "106.54.193.225".equals(ip);
}
/**
@@ -197,7 +197,7 @@ public class IpUtils {
return InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
}
- return "127.0.0.1";
+ return "106.54.193.225";
}
/**
diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java
index 2ceb282..976d688 100644
--- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java
+++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java
@@ -13,7 +13,7 @@ public class DatasourceContent {
public final static String PASSWORD = "bawei2112A";
- public final static String IP = "127.0.0.1";
+ public final static String IP = "106.54.193.225";
public final static Integer PORT = 3306;
}
diff --git a/cloud-gateway/src/main/resources/bootstrap.yml b/cloud-gateway/src/main/resources/bootstrap.yml
index aa98013..cb4e64c 100644
--- a/cloud-gateway/src/main/resources/bootstrap.yml
+++ b/cloud-gateway/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 127.0.0.1:8848
+ addr: 106.54.193.225:8848
user-name: nacos
password: nacos
namespace: one-saas
@@ -50,7 +50,7 @@ spring:
eager: true
transport:
# 控制台地址
- dashboard: 127.0.0.1:8718
+ dashboard: 106.54.193.225:8718
# nacos配置持久化
datasource:
ds1:
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml
index f4097e8..d466843 100644
--- a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml
@@ -1,10 +1,10 @@
# Tomcat
server:
- port: 9702
+ port: 10022
# nacos线上地址
nacos:
- addr: 127.0.0.1:8848
+ addr: 106.54.193.225:8848
user-name: nacos
password: nacos
namespace: one
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..2445efc
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/pom.xml
@@ -0,0 +1,114 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-modules
+ 3.6.3
+
+
+ cloud-modules-car-gateway
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+ com.muyu
+ cloud-common-core
+
+
+ com.muyu
+ cloud-common-security
+
+
+
+ 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-api-doc
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.aliyun
+ ecs20140526
+ 5.1.8
+
+
+ com.aliyun
+ tea-openapi
+ 0.3.2
+
+
+ com.aliyun
+ tea-console
+ 0.0.1
+
+
+ com.aliyun
+ tea-util
+ 0.2.21
+
+
+
+
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java
new file mode 100644
index 0000000..e9109de
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java
@@ -0,0 +1,23 @@
+package com.muyu.cargateway;
+
+import com.muyu.common.security.annotation.EnableCustomConfig;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-17-15:00
+ * @ Version:1.0
+ * @ Description:故障启动类
+ * @author Lenovo
+ */
+@EnableCustomConfig
+@EnableFeignClients
+@SpringBootApplication
+public class CarGatewayApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(CarGatewayApplication.class, args);
+ }
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java
new file mode 100644
index 0000000..545d937
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java
@@ -0,0 +1,89 @@
+package com.muyu.cargateway.cargatewaytest;
+
+import com.aliyun.ecs20140526.Client;
+import com.aliyun.ecs20140526.models.*;
+import com.aliyun.tea.TeaException;
+import com.aliyun.teaopenapi.models.Config;
+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;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-28-21:20
+ * @ Version:1.0
+ * @ Description:删除实例
+ * @author Lenovo
+ */
+@Log4j2
+@Component
+public class DeleteSample implements DisposableBean {
+
+ public static Client createClient() throws Exception {
+ // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
+ Config config = new Config()
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
+ .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL")
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+ .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP");
+ // Endpoint 请参考 https://api.aliyun.com/product/Ecs
+ config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
+ return new Client(config);
+ }
+ public static void deleteSample() throws Exception {
+ Client client = DeleteSample.createClient();
+ DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest();
+ attributeRequest.setRegionId("cn-shanghai");
+
+ 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("cn-shanghai")
+ .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);
+ }
+ }
+ @Override
+ public void destroy(){
+ try {
+ log.info("删除实例方法");
+ deleteSample();
+ } catch (Exception e) {
+ log.info("删除实例失败");
+ throw new RuntimeException(e);
+ }
+ log.info("删除实例成功");
+ }
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java
new file mode 100644
index 0000000..3ebe6bb
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java
@@ -0,0 +1,107 @@
+package com.muyu.cargateway.cargatewaytest;
+
+import com.aliyun.ecs20140526.Client;
+import com.aliyun.ecs20140526.models.RunInstancesRequest;
+import com.aliyun.tea.TeaException;
+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.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-28-21:10
+ * @ Version:1.0
+ * @ Description:调用ali的类
+ * @author Lenovo
+ */
+@Log4j2
+@Component
+public class Sample implements ApplicationRunner {
+
+ public static Client createClient() throws Exception {
+ // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
+ Config config = new Config()
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
+ .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL")
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+ .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP");
+ // Endpoint 请参考 https://api.aliyun.com/product/Ecs
+ config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
+ return new Client(config);
+ }
+ public static void generateInstance() throws Exception {
+ Client client = Sample.createClient();
+ RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk();
+ //设置系统盘的大小为40GiB
+ systemDisk.setSize("40");
+ //设置系统盘类型为cloud_essd
+ systemDisk.setCategory("cloud_essd");
+
+ // 创建创建实例请求对象并设置参数
+
+ RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
+ // 设置地域ID
+ .setRegionId("cn-shanghai")
+ // 设置镜像ID
+ .setImageId("m-uf65fvle9qseu9jo5jl3")
+ // 设置实例规格类型
+ .setInstanceType("ecs.t6-c1m1.large")
+ // 设置安全组ID
+ .setSecurityGroupId("sg-uf642d5u4ja5gsiitx8y")
+ // 设置虚拟交换机ID
+ .setVSwitchId("vsw-uf66lifrkhxqc94xi06v3")
+ // 设置实例名称
+ .setInstanceName("server-mqtt")
+ // 设置付费类型 按量付费
+ .setInstanceChargeType("PostPaid")
+ // 设置系统盘配置
+ .setSystemDisk(systemDisk)
+ // 设置用户名
+ .setHostName("root")
+ // 设置密码
+ .setPassword("10160810@a")
+ // 设置要创创建的实例数量
+ .setAmount(1)
+ .setInternetChargeType("PayByTraffic")
+ .setInternetMaxBandwidthOut(1);
+
+ RuntimeOptions runtimeOptions = new RuntimeOptions();
+ // 尝试执行创建实例请求
+ try {
+ // 复制代码运行请自行打印 API 的返回值
+ client.runInstancesWithOptions(runInstancesRequest, runtimeOptions);
+ } 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"));
+ Common.assertAsString(error.message);
+ }
+ }
+
+ @Override
+ public void run(ApplicationArguments args){
+ try {
+ log.info("开始创建实例");
+ generateInstance();
+ } catch (Exception e) {
+ log.info("创建实例失败");
+ throw new RuntimeException(e);
+ }
+ log.info("创建实例成功");
+ }
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java
new file mode 100644
index 0000000..df51878
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java
@@ -0,0 +1,27 @@
+package com.muyu.cargateway.controller;
+
+import com.muyu.cargateway.service.CarOneClickOperationService;
+import com.muyu.common.core.domain.Result;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-26-20:14
+ * @ Version:1.0
+ * @ Description:车辆一键操作控制层
+ * @author Lenovo
+ */
+@Log4j2
+@RestController
+@RequestMapping("/car/oneClick")
+public class CarOneClickOperationController {
+ @Autowired
+ private CarOneClickOperationService carOneClickOperationService;
+
+
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java
new file mode 100644
index 0000000..739be0c
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java
@@ -0,0 +1,64 @@
+package com.muyu.cargateway.controller;
+
+import com.muyu.cargateway.service.CarOneClickOperationService;
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.paho.client.mqttv3.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-27-20:08
+ * @ Version:1.0
+ * @ Description:fluxmq连接测试类
+ * @author Lenovo
+ */
+@Log4j2
+@RestController
+@RequestMapping("/testCarGateway")
+public class TestController {
+ @PostMapping("/testCarConnect")
+ public void testCarConnect() {
+ String topic="carOneClick";
+ String message="{\"carId\":\"123456789\",\"operation\":\"turnOn\"}";;
+ String broker="tcp://106.54.193.225:1883";
+ String clientId="javaSample";
+ int qos=1;
+
+ try {
+ MqttClient mqttClient =new MqttClient(broker, clientId);
+ MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
+ mqttConnectOptions.setCleanSession(true);
+ log.info("连接成功"+broker);
+ mqttClient.connect(mqttConnectOptions);
+
+ mqttClient.subscribe(topic,0);
+ mqttClient.setCallback(new MqttCallback() {
+ @Override
+ public void connectionLost(Throwable throwable) {
+ log.info("连接丢失");
+ }
+
+ @Override
+ public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
+ log.info(new String(mqttMessage.getPayload()));
+ }
+ @Override
+ public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
+ //发布完成时调用
+ }
+ });
+ } catch (MqttException e) {
+ log.info("连接失败"+e.getReasonCode());
+ log.info("信息"+e.getMessage());
+ log.info("异常"+e);
+ log.info("异常信息"+e.getLocalizedMessage());
+ log.info("异常类型"+e.getClass());
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliServerConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliServerConfig.java
new file mode 100644
index 0000000..b6d545a
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliServerConfig.java
@@ -0,0 +1,46 @@
+package com.muyu.cargateway.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-28-16:37
+ * @ Version:1.0
+ * @ Description:创建实例的配置
+ * @author Lenovo
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AliServerConfig {
+ /**
+ * 主键
+ */
+ private Long id;
+ /**
+ * 地域ID
+ */
+ private String regionId;
+ /**
+ * 镜像ID
+ */
+ private String imageId;
+ /**
+ * 实例规格
+ */
+ private String instanceType;
+ /**
+ * 安全组ID
+ */
+ private String securityGroupId;
+ /**
+ * 虚拟交换机ID
+ */
+ private String vSwitchId;
+
+
+}
+
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ServerConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ServerConfig.java
new file mode 100644
index 0000000..6628de0
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ServerConfig.java
@@ -0,0 +1,58 @@
+package com.muyu.cargateway.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-27-20:56
+ * @ Version:1.0
+ * @ Description:服务器配置
+ * @author Lenovo
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName(value="server_config")
+public class ServerConfig {
+ /**
+ * 主键
+ */
+ @TableId(value = "id",type = IdType.AUTO)
+ private Long id;
+ /**
+ * 租户id
+ */
+ private String tenantId;
+ /**
+ * 主机地址
+ */
+ private String host;
+ /**
+ * 端口
+ */
+ private String port;
+ /**
+ * 负载的地址
+ */
+ private String uri;
+ /**
+ * 默认MQTT地址
+ */
+ private String defaultMqttAddr;
+ /**
+ * 默认MQTT主题
+ */
+ private String defaultMqttTopic;
+ /**
+ * 默认MQTT QOS
+ */
+ private Integer defaultMqttQos;
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/TaskModel.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/TaskModel.java
new file mode 100644
index 0000000..f4ea58c
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/TaskModel.java
@@ -0,0 +1,87 @@
+package com.muyu.cargateway.domain.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-26-20:23
+ * @ Version:1.0
+ * @ Description:任务执行模型
+ * @author Lenovo
+ */
+@Data
+@Log4j2
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TaskModel {
+ /**
+ * 任务状态 默认为false状态
+ * true为执行中,false为未执行
+ */
+ private final AtomicBoolean status =new AtomicBoolean(Boolean.FALSE);
+ /**
+ * 堵塞计数器
+ */
+ private CountDownLatch countDownLatch;
+ /**
+ * 任务执行堵塞队列
+ */
+ private LinkedBlockingDeque carQueue =new LinkedBlockingDeque<>();
+ /**
+ * 任务是否执行
+ * true 执行中
+ * false 未执行
+ * @return 是否有任务执行
+ */
+ private boolean isExecution(){
+ return !status.get();
+ }
+ /**
+ * 任务名称
+ */
+ private String taskName;
+ /**
+ * 任务执行次数
+ */
+ private Integer taskExecutionCount=0;
+ /**
+ * 任务开始时间
+ */
+ private Long taskStartTime;
+ /**
+ * 任务成功执行次数
+ */
+ private AtomicInteger taskSuccessSum=new AtomicInteger();
+ /**
+ * 任务执行失败次数
+ */
+ private AtomicInteger taskErrorSum=new AtomicInteger();
+
+ /**
+ * 判断是否有任务
+ * @return true 有任务
+ */
+ public boolean hashNext(){
+ return !carQueue.isEmpty();
+ }
+
+ /**
+ * 获取下一个任务节点
+ * @return 任务VIN
+ */
+ public String next(){
+ return carQueue.poll();
+ }
+
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/properties/MqttProperties.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/properties/MqttProperties.java
new file mode 100644
index 0000000..f848275
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/properties/MqttProperties.java
@@ -0,0 +1,45 @@
+package com.muyu.cargateway.domain.properties;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author Lenovo
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-26-22:13
+ * @ Version:1.0
+ * @ Description:Mqtt的配置
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MqttProperties {
+ /**
+ * 节点
+ */
+ private String broker;
+ /**
+ * 主题
+ */
+ private String topic;
+ /**
+ * 用户名
+ */
+ private String userName;
+ /**
+ * 密码
+ */
+ private String password;
+ /**
+ * 客户端id
+ */
+ private String clientId;
+ /**
+ * 上报级别
+ */
+ private int qos = 0;
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/resp/AliServerConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/resp/AliServerConfig.java
new file mode 100644
index 0000000..ded0cc8
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/resp/AliServerConfig.java
@@ -0,0 +1,37 @@
+package com.muyu.cargateway.domain.resp;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-26-15:53
+ * @ Version:1.0
+ * @ Description:调用Ali服务器配置实体类
+ * @author Lenovo
+ */
+@Data
+@SuperBuilder
+@AllArgsConstructor
+@NoArgsConstructor
+public class AliServerConfig {
+ /**
+ * 主键
+ */
+ private Long id;
+ /**
+ * 地域id (实例所属的地域ID)
+ */
+ private String regionId;
+ /**
+ * 镜像id
+ */
+ private String imageId;
+ /**
+ * 实例规格 (实例的资源规格)
+ */
+ private String instanceType;
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java
new file mode 100644
index 0000000..25cffea
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java
@@ -0,0 +1,15 @@
+package com.muyu.cargateway.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-26-20:15
+ * @ Version:1.0
+ * @ Description:车辆一键操作持久层
+ * @author Lenovo
+ */
+@Mapper
+public interface CarOneClickOperationMapper {
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java
new file mode 100644
index 0000000..27dafaa
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java
@@ -0,0 +1,14 @@
+package com.muyu.cargateway.service;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-26-20:15
+ * @ Version:1.0
+ * @ Description:车辆一键操作业务层
+ * @author Lenovo
+ */
+public interface CarOneClickOperationService {
+
+
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java
new file mode 100644
index 0000000..4facb79
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java
@@ -0,0 +1,18 @@
+package com.muyu.cargateway.service.Impl;
+
+import com.muyu.cargateway.service.CarOneClickOperationService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-26-20:16
+ * @ Version:1.0
+ * @ Description:车辆一键操作业务实现层
+ * @author Lenovo
+ */
+@Service
+public class CarOneClickOperationServiceImpl implements CarOneClickOperationService {
+
+
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java
new file mode 100644
index 0000000..35093cc
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java
@@ -0,0 +1,60 @@
+//package com.muyu.cargateway.test;
+//
+//import lombok.extern.log4j.Log4j2;
+//import org.eclipse.paho.client.mqttv3.MqttClient;
+//import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+//import org.eclipse.paho.client.mqttv3.MqttException;
+//import org.eclipse.paho.client.mqttv3.MqttMessage;
+//
+///**
+// * @ Tool:IntelliJ IDEA
+// * @ Author:CHX
+// * @ Date:2024-09-27-22:32
+// * @ Version:1.0
+// * @ Description:mqtt
+// * @author Lenovo
+// */
+//@Log4j2
+//public class MqttPublisher {
+// //MQTT代理地址
+// String broker="tcp://106.54.193.225:1883";
+// //客户端ID
+// String clientId="car-gateway";
+// //主题
+// String topic="car-gateway";
+// //要发送的内容
+// String content="连接成功";
+// //服务质量 0:最多一次 1:至少一次 2:
+// int qos=0;
+// MqttClient mqttClient;
+//
+// {
+// try {
+// mqttClient = new MqttClient(broker, clientId);
+//
+// //连接到MQtt代理
+// MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
+// //清空会话
+// mqttConnectOptions.setCleanSession(true);
+// //连接
+// mqttClient.connect(mqttConnectOptions);
+// log.info("MQTT客户端连接成功"+broker);
+//
+// //发送消息
+// MqttMessage message = new MqttMessage(content.getBytes());
+// //设置服务的质量
+// message.setQos(qos);
+// //开始发送消息
+// mqttClient.publish(topic, message);
+// log.info("消息发送成功,消息是:"+content);
+//
+// //断开连接
+// mqttClient.disconnect();
+// log.info("MQTT断开连接成功");
+// } catch (MqttException e) {
+// //输出异常信息
+// e.getStackTrace();
+// throw new RuntimeException(e);
+// }
+// }
+//}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java
new file mode 100644
index 0000000..5827423
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java
@@ -0,0 +1,120 @@
+//package com.muyu.cargateway.test;
+//
+//import com.aliyun.ecs20140526.Client;
+//import com.aliyun.ecs20140526.models.RunInstancesRequest;
+//import com.aliyun.tea.TeaException;
+//import com.aliyun.teaopenapi.models.Config;
+//import com.aliyun.teautil.Common;
+//import com.aliyun.teautil.models.RuntimeOptions;
+//import lombok.extern.log4j.Log4j2;
+//
+//import java.util.Arrays;
+//import java.util.List;
+//
+//
+///**
+// * @ Tool:IntelliJ IDEA
+// * @ Author:CHX
+// * @ Date:2024-09-27-23:38
+// * @ Version:1.0
+// * @ Description:调用ali的测试demo类
+// * @author Lenovo
+// */
+//@Log4j2
+//public class Sample {
+//
+// /**
+// * 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("LTAI5tDH3FyRx4PRr6anx2TL")
+// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+// .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP");
+// // Endpoint 请参考 https://api.aliyun.com/product/Ecs
+// config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
+// return new Client(config);
+// }
+//
+// /**
+// * 本程序的入口点
+// * 主要功能是创建阿里云ECS实例
+// *
+// * @param args 命令行参数
+// * @throws Exception 如果执行过程中发生错误则抛出异常
+// */
+// public static void main(String[] args) throws Exception {
+// // 将命令行参数转换为字符串列表
+// List arg = Arrays.asList(args);
+//
+// // 创建阿里云ECS客户端
+// Client client = Sample.createClient();
+//
+// // 配置系统盘参数
+// RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk()
+// // 设置系统盘大小为20G
+// .setSize("40")
+// // 设置系统盘类型为cloud_essd
+// .setCategory("cloud_essd");
+//
+// // 创建创建实例请求对象并设置参数
+//
+// RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
+// // 设置地域ID
+// .setRegionId("cn-shanghai")
+// // 设置镜像ID
+// .setImageId("m-uf65fvle9qseu9jo5jl3")
+// // 设置实例规格类型
+// .setInstanceType("ecs.t6-c1m1.large")
+// // 设置安全组ID
+// .setSecurityGroupId("sg-uf642d5u4ja5gsiitx8y")
+// // 设置虚拟交换机ID
+// .setVSwitchId("vsw-uf66lifrkhxqc94xi06v3")
+// // 设置实例名称
+// .setInstanceName("server-mqtt")
+// // 设置付费类型 按量付费
+// .setInstanceChargeType("PostPaid")
+// // 设置系统盘配置
+// .setSystemDisk(systemDisk)
+// // 设置用户名
+// .setHostName("root")
+// // 设置密码
+// .setPassword("10160810@a")
+// // 设置要创创建的实例数量
+// .setAmount(1);
+//
+//
+//
+//
+// // 创建运行时选项对象
+// RuntimeOptions runtime = new 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"));
+// Common.assertAsString(error.message);
+// }
+// }
+//}
+//
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/bootstrap.yml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..335687b
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml
@@ -0,0 +1,60 @@
+# Tomcat
+server:
+ port: 9702
+
+# nacos线上地址
+nacos:
+ addr: 106.54.193.225:8848
+ user-name: nacos
+ password: nacos
+ namespace: one
+# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
+# Spring
+spring:
+ amqp:
+ deserialization:
+ trust:
+ all: true
+ main:
+ allow-bean-definition-overriding: true
+ application:
+ # 应用名称
+ name: cloud-breakdown
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: ${nacos.addr}
+ # nacos用户名
+ username: ${nacos.user-name}
+ # nacos密码
+ password: ${nacos.password}
+ # 命名空间
+ namespace: ${nacos.namespace}
+ config:
+ # 服务注册地址
+ server-addr: ${nacos.addr}
+ # nacos用户名
+ username: ${nacos.user-name}
+ # nacos密码
+ password: ${nacos.password}
+ # 命名空间
+ namespace: ${nacos.namespace}
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ # 系统共享配置
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ # 系统环境Config共享配置
+ - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ # xxl-job 配置文件
+ - application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ # rabbit 配置文件
+ - application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+logging:
+ level:
+ com.muyu.breakdown.mapper: DEBUG
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..34cd186
--- /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..1193d09
--- /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..1193d09
--- /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}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml
index 00342f2..a07c11c 100644
--- a/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml
+++ b/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 127.0.0.1:8848
+ addr: 106.54.193.225:8848
user-name: nacos
password: nacos
namespace: public
diff --git a/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml
index c21b371..a36bd1b 100644
--- a/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml
+++ b/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 127.0.0.1:8848
+ addr: 47.116.173.119:8848
user-name: nacos
password: nacos
namespace: one-saas
diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml
index f40b3a7..47acae2 100644
--- a/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml
+++ b/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 127.0.0.1:8848
+ addr: 47.116.173.119:8848
user-name: nacos
password: nacos
namespace: one-saas
diff --git a/cloud-modules/cloud-modules-system-saas/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-system-saas/src/main/resources/bootstrap.yml
index 388015e..220dec5 100644
--- a/cloud-modules/cloud-modules-system-saas/src/main/resources/bootstrap.yml
+++ b/cloud-modules/cloud-modules-system-saas/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 127.0.0.1:8848
+ addr: 47.116.173.119:8848
user-name: nacos
password: nacos
namespace: one-saas
diff --git a/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml
index a5dd953..2db1105 100644
--- a/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml
+++ b/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 127.0.0.1:8848
+ addr: 47.116.173.119:8848
user-name: nacos
password: nacos
namespace: one-saas
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml
index 756d816..e2b3575 100644
--- a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 127.0.0.1:8848
+ addr: 106.54.193.225:8848
user-name: nacos
password: nacos
namespace: one
diff --git a/cloud-modules/pom.xml b/cloud-modules/pom.xml
index 1d52970..a4d02f4 100644
--- a/cloud-modules/pom.xml
+++ b/cloud-modules/pom.xml
@@ -18,6 +18,7 @@
cloud-modules-rail
cloud-modules-warn
cloud-modules-carmanage
+ cloud-modules-car-gateway
cloud-modules
diff --git a/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml b/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml
index a62e359..6210ca6 100644
--- a/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml
+++ b/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 127.0.0.1:8848
+ addr: 106.54.193.225:8848
user-name: nacos
password: nacos
namespace: one-saas
diff --git a/init-file/cloud-system.sql b/init-file/cloud-system.sql
index 3322763..c2c02e7 100644
--- a/init-file/cloud-system.sql
+++ b/init-file/cloud-system.sql
@@ -639,8 +639,8 @@ CREATE TABLE `sys_user` (
-- Records of sys_user
-- ----------------------------
BEGIN;
-INSERT INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2024-05-23 15:08:18', 'admin', '2024-05-23 15:08:18', '', NULL, '管理员');
-INSERT INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2024-05-23 15:08:18', 'admin', '2024-05-23 15:08:18', '', NULL, '测试员');
+INSERT INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '106.54.193.225', '2024-05-23 15:08:18', 'admin', '2024-05-23 15:08:18', '', NULL, '管理员');
+INSERT INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '106.54.193.225', '2024-05-23 15:08:18', 'admin', '2024-05-23 15:08:18', '', NULL, '测试员');
COMMIT;
-- ----------------------------
From b318c0e30b1ae32af57229b8d38c1fed10213f35 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com>
Date: Mon, 30 Sep 2024 09:59:01 +0800
Subject: [PATCH 02/14] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=88=B0=E5=AE=9E?=
=?UTF-8?q?=E4=BE=8B=E7=9A=84ID=E5=92=8C=E5=AE=9E=E4=BE=8B=E7=9A=84?=
=?UTF-8?q?=E5=85=AC=E7=BD=91ip=E4=BB=A5=E5=8F=8A=E5=AE=9E=E4=BE=8B?=
=?UTF-8?q?=E7=8A=B6=E6=80=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cargateway/cargatewaytest/Sample.java | 107 --------
.../com/muyu/cargateway/domain/Instance.java | 22 ++
.../com/muyu/cargateway/instance/Sample.java | 246 ++++++++++++++++++
.../muyu/cargateway/test/DeleteSample.java | 89 +++++++
.../muyu/cargateway/test/MqttPublisher.java | 60 -----
.../muyu/cargateway/test/SelectSample.java | 79 ++++++
6 files changed, 436 insertions(+), 167 deletions(-)
delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/Instance.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java
delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java
deleted file mode 100644
index 3ebe6bb..0000000
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.muyu.cargateway.cargatewaytest;
-
-import com.aliyun.ecs20140526.Client;
-import com.aliyun.ecs20140526.models.RunInstancesRequest;
-import com.aliyun.tea.TeaException;
-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.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.stereotype.Component;
-
-/**
- * @ Tool:IntelliJ IDEA
- * @ Author:CHX
- * @ Date:2024-09-28-21:10
- * @ Version:1.0
- * @ Description:调用ali的类
- * @author Lenovo
- */
-@Log4j2
-@Component
-public class Sample implements ApplicationRunner {
-
- public static Client createClient() throws Exception {
- // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
- Config config = new Config()
- // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
- .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL")
- // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
- .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP");
- // Endpoint 请参考 https://api.aliyun.com/product/Ecs
- config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
- return new Client(config);
- }
- public static void generateInstance() throws Exception {
- Client client = Sample.createClient();
- RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk();
- //设置系统盘的大小为40GiB
- systemDisk.setSize("40");
- //设置系统盘类型为cloud_essd
- systemDisk.setCategory("cloud_essd");
-
- // 创建创建实例请求对象并设置参数
-
- RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
- // 设置地域ID
- .setRegionId("cn-shanghai")
- // 设置镜像ID
- .setImageId("m-uf65fvle9qseu9jo5jl3")
- // 设置实例规格类型
- .setInstanceType("ecs.t6-c1m1.large")
- // 设置安全组ID
- .setSecurityGroupId("sg-uf642d5u4ja5gsiitx8y")
- // 设置虚拟交换机ID
- .setVSwitchId("vsw-uf66lifrkhxqc94xi06v3")
- // 设置实例名称
- .setInstanceName("server-mqtt")
- // 设置付费类型 按量付费
- .setInstanceChargeType("PostPaid")
- // 设置系统盘配置
- .setSystemDisk(systemDisk)
- // 设置用户名
- .setHostName("root")
- // 设置密码
- .setPassword("10160810@a")
- // 设置要创创建的实例数量
- .setAmount(1)
- .setInternetChargeType("PayByTraffic")
- .setInternetMaxBandwidthOut(1);
-
- RuntimeOptions runtimeOptions = new RuntimeOptions();
- // 尝试执行创建实例请求
- try {
- // 复制代码运行请自行打印 API 的返回值
- client.runInstancesWithOptions(runInstancesRequest, runtimeOptions);
- } 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"));
- Common.assertAsString(error.message);
- }
- }
-
- @Override
- public void run(ApplicationArguments args){
- try {
- log.info("开始创建实例");
- generateInstance();
- } catch (Exception e) {
- log.info("创建实例失败");
- throw new RuntimeException(e);
- }
- log.info("创建实例成功");
- }
-}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/Instance.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/Instance.java
new file mode 100644
index 0000000..6323abd
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/Instance.java
@@ -0,0 +1,22 @@
+package com.muyu.cargateway.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-30-9:33
+ * @ Version:1.0
+ * @ Description:
+ * @author Lenovo
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Instance {
+ private String instanceId;
+ private String ipAddress;
+ private String status;
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
new file mode 100644
index 0000000..52ca067
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
@@ -0,0 +1,246 @@
+package com.muyu.cargateway.instance;
+
+import com.aliyun.ecs20140526.Client;
+import com.aliyun.ecs20140526.models.*;
+import com.aliyun.tea.TeaException;
+import com.aliyun.teaopenapi.models.Config;
+import com.aliyun.teautil.Common;
+import com.aliyun.teautil.models.RuntimeOptions;
+import com.muyu.common.redis.service.RedisService;
+import lombok.extern.log4j.Log4j2;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-28-21:10
+ * @ Version:1.0
+ * @ Description:调用ali的类
+ * @author Lenovo
+ */
+@Log4j2
+@Component
+public class Sample implements ApplicationRunner , DisposableBean {
+
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+ @Autowired
+ private RedisService redisService;
+
+ public static final String ACCESS_KEY_ID = "LTAI5tDH3FyRx4PRr6anx2TL";
+ public static final String ACCESS_KEY_SECRET = "xdQnX2tDattY50raNkUWmHzE2tondP";
+
+ public static Client createClient() throws Exception {
+ // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
+ Config config = new Config()
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
+ .setAccessKeyId(ACCESS_KEY_ID)
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+ .setAccessKeySecret(ACCESS_KEY_SECRET);
+ // Endpoint 请参考 https://api.aliyun.com/product/Ecs
+ config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
+ return new Client(config);
+ }
+
+ /**
+ * 创建实例
+ * @throws Exception
+ */
+ public void generateInstance() throws Exception {
+ Client client = Sample.createClient();
+ RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk();
+ //设置系统盘的大小为40GiB
+ systemDisk.setSize("40");
+ //设置系统盘类型为cloud_essd
+ systemDisk.setCategory("cloud_essd");
+
+ // 创建创建实例请求对象并设置参数
+
+ RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
+ // 设置地域ID
+ .setRegionId("cn-shanghai")
+ // 设置镜像ID
+ .setImageId("m-uf63y73rquw4ub9znymf")
+ // 设置实例规格类型
+ .setInstanceType("ecs.t6-c1m1.large")
+ // 设置安全组ID
+ .setSecurityGroupId("sg-uf642d5u4ja5gsiitx8y")
+ // 设置虚拟交换机ID
+ .setVSwitchId("vsw-uf66lifrkhxqc94xi06v3")
+ // 设置实例名称
+ .setInstanceName("server-mqtt")
+ // 设置付费类型 按量付费
+ .setInstanceChargeType("PostPaid")
+ // 设置系统盘配置
+ .setSystemDisk(systemDisk)
+ // 设置用户名
+ .setHostName("root")
+ // 设置密码
+ .setPassword("10160810@a")
+ // 设置要创建的实例数量
+ .setAmount(2)
+ .setInternetChargeType("PayByTraffic")
+ .setInternetMaxBandwidthOut(1);
+
+ RuntimeOptions runtimeOptions = new RuntimeOptions();
+ // 尝试执行创建实例请求
+ try {
+
+
+ // 复制代码运行请自行打印 API 的返回值
+ RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runtimeOptions);
+ log.info("==================实例创建成功");
+ RunInstancesResponseBody body = runInstancesResponse.getBody();
+ RunInstancesResponseBody.RunInstancesResponseBodyInstanceIdSets instanceIdSets = body.getInstanceIdSets();
+
+ List instanceIds = new ArrayList<>();
+ for (String string : instanceIdSets.instanceIdSet) {
+ instanceIds.add(string);
+ }
+
+
+ DescribeInstancesResponse describeInstancesResponse = getStrings(client);
+ log.info("====>实例ID"+instanceIds);
+ List instancesInstances = describeInstancesResponse.getBody().getInstances().getInstance();
+ for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : instancesInstances) {
+ String instanceId = instance.getInstanceId();
+ String ipAddress = instance.getPublicIpAddress().getIpAddress().get(0);
+ String status = instance.getStatus();
+ log.info("==================获取到的实例ID为"+instanceId+" IP为"+ipAddress+" 状态为"+status);
+ instanceIds.add(instanceId);
+ instanceIds.add(ipAddress);
+ instanceIds.add(status);
+ }
+
+
+// for (String string : stringArrayList) {
+// log.info("==================获取到的实例ID为"+string);
+// }
+// redisTemplate.opsForList().rightPush("instanceId",String.valueOf(stringArrayList));
+// log.info("==================redis存储成功");
+// List instanceId = redisTemplate.opsForList().range("instanceId", 0, -1);
+// for (String string : instanceId) {
+// log.info("==================redis获取实例ID成功"+string);
+// }
+
+ } 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"));
+ Common.assertAsString(error.message);
+ }
+ }
+
+ /**
+ * 查询实例的详细信息
+ */
+ public void selectInstance(){
+
+ }
+
+ /**
+ * 删除创建的实例
+ * @throws Exception
+ */
+ public void deleteSample() throws Exception {
+ Client client = Sample.createClient();
+ DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest();
+ attributeRequest.setRegionId("cn-shanghai");
+
+ 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("cn-shanghai")
+ .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);
+ }
+ }
+
+ /**
+ * 获取实例ID
+ * @param client
+ * @return string类型的实例ID集合
+ * @throws Exception
+ */
+ @NotNull
+ private DescribeInstancesResponse getStrings(Client client) throws Exception {
+ DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest();
+ attributeRequest.setInstanceName("server-mqtt");
+ attributeRequest.setRegionId("cn-shanghai");
+
+ RuntimeOptions runtimeOptions = new RuntimeOptions();
+
+ DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(attributeRequest, runtimeOptions);
+ return instancesWithOptions;
+ }
+
+ @Override
+ public void run(ApplicationArguments args){
+ try {
+ log.info("开始创建实例");
+ generateInstance();
+ } catch (Exception e) {
+ log.info("创建实例失败");
+ throw new RuntimeException(e);
+ }
+ log.info("创建实例成功");
+ }
+
+ @Override
+ public void destroy(){
+ try {
+ log.info("删除实例方法");
+ deleteSample();
+ } catch (Exception e) {
+ log.info("删除实例失败");
+ throw new RuntimeException(e);
+ }
+ log.info("删除实例成功");
+ }
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java
new file mode 100644
index 0000000..043c9c6
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java
@@ -0,0 +1,89 @@
+//package com.muyu.cargateway.cargatewaytest;
+//
+//import com.aliyun.ecs20140526.Client;
+//import com.aliyun.ecs20140526.models.*;
+//import com.aliyun.tea.TeaException;
+//import com.aliyun.teaopenapi.models.Config;
+//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;
+//
+///**
+// * @ Tool:IntelliJ IDEA
+// * @ Author:CHX
+// * @ Date:2024-09-28-21:20
+// * @ Version:1.0
+// * @ Description:删除实例
+// * @author Lenovo
+// */
+//@Log4j2
+//@Component
+//public class DeleteSample implements DisposableBean {
+//
+// public static Client createClient() throws Exception {
+// // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
+// Config config = new Config()
+// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
+// .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL")
+// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+// .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP");
+// // Endpoint 请参考 https://api.aliyun.com/product/Ecs
+// config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
+// return new Client(config);
+// }
+// public static void deleteSample() throws Exception {
+// Client client = DeleteSample.createClient();
+// DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest();
+// attributeRequest.setRegionId("cn-shanghai");
+//
+// 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("cn-shanghai")
+// .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);
+// }
+// }
+// @Override
+// public void destroy(){
+// try {
+// log.info("删除实例方法");
+// deleteSample();
+// } catch (Exception e) {
+// log.info("删除实例失败");
+// throw new RuntimeException(e);
+// }
+// log.info("删除实例成功");
+// }
+//}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java
deleted file mode 100644
index 35093cc..0000000
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java
+++ /dev/null
@@ -1,60 +0,0 @@
-//package com.muyu.cargateway.test;
-//
-//import lombok.extern.log4j.Log4j2;
-//import org.eclipse.paho.client.mqttv3.MqttClient;
-//import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
-//import org.eclipse.paho.client.mqttv3.MqttException;
-//import org.eclipse.paho.client.mqttv3.MqttMessage;
-//
-///**
-// * @ Tool:IntelliJ IDEA
-// * @ Author:CHX
-// * @ Date:2024-09-27-22:32
-// * @ Version:1.0
-// * @ Description:mqtt
-// * @author Lenovo
-// */
-//@Log4j2
-//public class MqttPublisher {
-// //MQTT代理地址
-// String broker="tcp://106.54.193.225:1883";
-// //客户端ID
-// String clientId="car-gateway";
-// //主题
-// String topic="car-gateway";
-// //要发送的内容
-// String content="连接成功";
-// //服务质量 0:最多一次 1:至少一次 2:
-// int qos=0;
-// MqttClient mqttClient;
-//
-// {
-// try {
-// mqttClient = new MqttClient(broker, clientId);
-//
-// //连接到MQtt代理
-// MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
-// //清空会话
-// mqttConnectOptions.setCleanSession(true);
-// //连接
-// mqttClient.connect(mqttConnectOptions);
-// log.info("MQTT客户端连接成功"+broker);
-//
-// //发送消息
-// MqttMessage message = new MqttMessage(content.getBytes());
-// //设置服务的质量
-// message.setQos(qos);
-// //开始发送消息
-// mqttClient.publish(topic, message);
-// log.info("消息发送成功,消息是:"+content);
-//
-// //断开连接
-// mqttClient.disconnect();
-// log.info("MQTT断开连接成功");
-// } catch (MqttException e) {
-// //输出异常信息
-// e.getStackTrace();
-// throw new RuntimeException(e);
-// }
-// }
-//}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java
new file mode 100644
index 0000000..8444813
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java
@@ -0,0 +1,79 @@
+package com.muyu.cargateway.test;
+
+import com.aliyun.ecs20140526.Client;
+import com.aliyun.ecs20140526.models.DescribeInstanceAttributeRequest;
+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.teaopenapi.models.Config;
+import com.aliyun.teautil.Common;
+import com.aliyun.teautil.models.RuntimeOptions;
+import com.muyu.cargateway.instance.Sample;
+import lombok.extern.log4j.Log4j2;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-29-20:16
+ * @ Version:1.0
+ * @ Description:查询实例所有信息
+ * @author Lenovo
+ */
+@Log4j2
+public class SelectSample {
+ 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("LTAI5tDH3FyRx4PRr6anx2TL")
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+ .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP");
+ // Endpoint 请参考 https://api.aliyun.com/product/Ecs
+ config.endpoint = "ecs.cn-shanghai.aliyuncs.com";
+ return new Client(config);
+ }
+
+ public static void main(String[] args_) throws Exception {
+ List args = Arrays.asList(args_);
+ Client client = Sample.createClient();
+ DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest()
+ .setRegionId("cn-shanghai");
+ RuntimeOptions runtime = new RuntimeOptions();
+ try {
+ // 复制代码运行请自行打印 API 的返回值
+ DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(describeInstancesRequest, runtime);
+ ArrayList list = new ArrayList<>();
+ DescribeInstancesResponseBody body = instancesWithOptions.getBody();
+ for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.instances.instance) {
+ list.add(instance.getInstanceId());
+ list.add(instance.getPublicIpAddress().ipAddress.get(0));
+ list.add(instance.getStatus());
+
+ }
+ log.info(Common.toJSONString(list));
+ } catch (TeaException error) {
+ // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+ // 错误 message
+ System.out.println(error.getMessage());
+ // 诊断地址
+ System.out.println(error.getData().get("Recommend"));
+ 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"));
+ Common.assertAsString(error.message);
+ }
+
+ }
+}
From f5d6b5c00d700fa569b6350bc396048babd87013 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com>
Date: Sun, 6 Oct 2024 16:26:36 +0800
Subject: [PATCH 03/14] =?UTF-8?q?=E6=8E=A5=E5=8F=97=E5=88=B0vin=20?=
=?UTF-8?q?=E7=94=A8=E6=88=B7=E5=90=8D=20=E6=97=B6=E9=97=B4=E6=88=B3=20?=
=?UTF-8?q?=E9=9A=8F=E6=9C=BA=E6=95=B0=20=E6=8B=BC=E6=8E=A5=E5=AD=98?=
=?UTF-8?q?=E5=BA=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
cloud-auth/src/main/resources/bootstrap.yml | 2 +-
.../src/main/resources/bootstrap.yml | 2 +-
.../src/main/resources/bootstrap.yml | 2 +-
.../cloud-modules-car-gateway/pom.xml | 32 ++---
.../cargatewaytest/DeleteSample.java | 89 ------------
.../cargateway/config/RabbitmqConfig.java | 101 +++++++++++++
.../muyu/cargateway/config/RedisConfig.java | 33 +++++
.../cargateway/config/RestTemplateConfig.java | 48 +++++++
.../CarOneClickOperationController.java | 20 ++-
.../cargateway/controller/TestController.java | 64 ---------
.../{Instance.java => AliInstance.java} | 11 +-
.../muyu/cargateway/domain/ConnectWeight.java | 27 ++++
.../muyu/cargateway/domain/HttpStatus.java | 93 ++++++++++++
.../cargateway/domain/VehicleConnection.java | 35 +++++
.../com/muyu/cargateway/domain/VinIp.java | 27 ++++
.../domain/model/MqttServerModel.java | 29 ++++
.../domain/req/VehicleConnectionReq.java | 38 +++++
.../com/muyu/cargateway/instance/Sample.java | 82 +++++------
.../mapper/CarOneClickOperationMapper.java | 2 +
.../service/CarOneClickOperationService.java | 9 +-
.../Impl/CarOneClickOperationServiceImpl.java | 29 ++++
.../com/muyu/cargateway/utils/ECSTool.java | 135 ++++++++++++++++++
.../src/main/resources/bootstrap.yml | 4 +-
.../mapper/CarOneClickOperationMapper.xml | 14 ++
.../src/main/resources/bootstrap.yml | 2 +-
.../src/main/resources/bootstrap.yml | 2 +-
.../src/main/resources/bootstrap.yml | 2 +-
27 files changed, 703 insertions(+), 231 deletions(-)
delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RestTemplateConfig.java
delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java
rename cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/{Instance.java => AliInstance.java} (75%)
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ConnectWeight.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/HttpStatus.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/MqttServerModel.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/req/VehicleConnectionReq.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/utils/ECSTool.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml
diff --git a/cloud-auth/src/main/resources/bootstrap.yml b/cloud-auth/src/main/resources/bootstrap.yml
index 910ec21..930ce5a 100644
--- a/cloud-auth/src/main/resources/bootstrap.yml
+++ b/cloud-auth/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 106.54.193.225:8848
+ addr: 47.116.173.119:8848
user-name: nacos
password: nacos
namespace: one-saas
diff --git a/cloud-gateway/src/main/resources/bootstrap.yml b/cloud-gateway/src/main/resources/bootstrap.yml
index cb4e64c..3782dab 100644
--- a/cloud-gateway/src/main/resources/bootstrap.yml
+++ b/cloud-gateway/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 106.54.193.225:8848
+ addr: 47.116.173.119:8848
user-name: nacos
password: nacos
namespace: one-saas
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml
index d466843..cc68191 100644
--- a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml
@@ -4,7 +4,7 @@ server:
# nacos线上地址
nacos:
- addr: 106.54.193.225:8848
+ addr: 47.116.173.119:8848
user-name: nacos
password: nacos
namespace: one
diff --git a/cloud-modules/cloud-modules-car-gateway/pom.xml b/cloud-modules/cloud-modules-car-gateway/pom.xml
index 2445efc..74ddfa6 100644
--- a/cloud-modules/cloud-modules-car-gateway/pom.xml
+++ b/cloud-modules/cloud-modules-car-gateway/pom.xml
@@ -67,28 +67,28 @@
cloud-common-datascope
-
-
-
-
-
-
com.muyu
cloud-common-api-doc
-
-
-
-
-
-
-
-
-
-
+
+
+ org.apache.httpcomponents
+ httpcore
+ 4.4.12
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.13
+
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
com.aliyun
ecs20140526
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java
deleted file mode 100644
index 545d937..0000000
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.muyu.cargateway.cargatewaytest;
-
-import com.aliyun.ecs20140526.Client;
-import com.aliyun.ecs20140526.models.*;
-import com.aliyun.tea.TeaException;
-import com.aliyun.teaopenapi.models.Config;
-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;
-
-/**
- * @ Tool:IntelliJ IDEA
- * @ Author:CHX
- * @ Date:2024-09-28-21:20
- * @ Version:1.0
- * @ Description:删除实例
- * @author Lenovo
- */
-@Log4j2
-@Component
-public class DeleteSample implements DisposableBean {
-
- public static Client createClient() throws Exception {
- // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
- Config config = new Config()
- // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
- .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL")
- // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
- .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP");
- // Endpoint 请参考 https://api.aliyun.com/product/Ecs
- config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
- return new Client(config);
- }
- public static void deleteSample() throws Exception {
- Client client = DeleteSample.createClient();
- DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest();
- attributeRequest.setRegionId("cn-shanghai");
-
- 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("cn-shanghai")
- .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);
- }
- }
- @Override
- public void destroy(){
- try {
- log.info("删除实例方法");
- deleteSample();
- } catch (Exception e) {
- log.info("删除实例失败");
- throw new RuntimeException(e);
- }
- log.info("删除实例成功");
- }
-}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java
new file mode 100644
index 0000000..d215a28
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java
@@ -0,0 +1,101 @@
+package com.muyu.cargateway.config;
+
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.Exchange;
+import org.springframework.amqp.core.ExchangeBuilder;
+import org.springframework.amqp.core.Queue;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-10-04-15:13
+ * @ Version:1.0
+ * @ Description:rabbitmq配置类
+ * @author Lenovo
+ */
+@Configuration
+public class RabbitmqConfig {
+ // 日志
+ private static final Logger logger = LoggerFactory.getLogger(RabbitmqConfig.class);
+
+ /**
+ * 队列
+ */
+ public static final String QUEUE_INFORM_EMAIL = "queue_inform_email";
+ /**
+ * 队列
+ */
+ public static final String QUEUE_INFORM_SMS = "queue_inform_sms";
+ /**
+ * 交换机
+ */
+ public static final String EXCHANGE_TOPICS_INFORM = "exchange_topics_inform";
+ /**
+ * 路由key
+ */
+ public static final String ROUTINGKEY_EMAIL = "inform.#.email.#";
+ /**
+ * 路由key
+ */
+ public static final String ROUTINGKEY_SMS = "inform.#.sms.#";
+
+ /**
+ * 声明交换机,做持久化
+ */
+ @Bean(EXCHANGE_TOPICS_INFORM)
+ public Exchange exchangeTopicsInform() {
+ try {
+ Exchange exchange = ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build();
+ logger.info("创建的交换机为: {}", EXCHANGE_TOPICS_INFORM);
+ return exchange;
+ } catch (Exception e) {
+ logger.error("创建该: {} 交换机失败", EXCHANGE_TOPICS_INFORM, e);
+ throw e;
+ }
+ }
+
+ // 声明QUEUE_INFORM_EMAIL队列
+ @Bean(QUEUE_INFORM_EMAIL)
+ public Queue queueInformEmail() {
+ try {
+ Queue queue = new Queue(QUEUE_INFORM_EMAIL);
+ logger.info("创建的对列为: {}", QUEUE_INFORM_EMAIL);
+ return queue;
+ } catch (Exception e) {
+ logger.error("创建该: {} 队列失败", QUEUE_INFORM_EMAIL, e);
+ throw e;
+ }
+ }
+
+ // 声明QUEUE_INFORM_SMS队列
+ @Bean(QUEUE_INFORM_SMS)
+ public Queue queueInformSms() {
+ try {
+ Queue queue = new Queue(QUEUE_INFORM_SMS);
+ logger.info("创建的对列为: {}", QUEUE_INFORM_SMS);
+ return queue;
+ } catch (Exception e) {
+ logger.error("创建该: {} 队列失败", QUEUE_INFORM_SMS, e);
+ throw e;
+ }
+ }
+
+ //ROUTINGKEY_EMAIL队列绑定交换机,指定routingKey
+ @Bean
+ public Binding bindingQueueInformEmail(@Qualifier(QUEUE_INFORM_EMAIL) Queue queue,
+ @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){
+ return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_EMAIL).noargs();
+ }
+ //ROUTINGKEY_SMS队列绑定交换机,指定routingKey
+ @Bean
+ public Binding bindingRoutingKeySms(@Qualifier(QUEUE_INFORM_SMS) Queue queue,
+ @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){
+ return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_SMS).noargs();
+ }
+}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java
new file mode 100644
index 0000000..8687020
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java
@@ -0,0 +1,33 @@
+package com.muyu.cargateway.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;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-10-04-15:12
+ * @ Version:1.0
+ * @ Description:Redis配置类
+ * @author Lenovo
+ */
+@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
+
+ com.muyu
+ cloud-common-rabbit
+
@@ -84,11 +88,7 @@
httpclient
4.5.13
-
-
- org.springframework.boot
- spring-boot-starter-amqp
-
+
com.aliyun
ecs20140526
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java
index 8687020..7b7304e 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java
@@ -28,6 +28,5 @@ public class RedisConfig {
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
return redisTemplate;
-
}
}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
index 4e6b5a7..2ae8802 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
@@ -85,7 +85,7 @@ public class Sample implements ApplicationRunner , DisposableBean {
// 设置密码
.setPassword("10160810@a")
// 设置要创建的实例数量
- .setAmount(2)
+ .setAmount(1)
.setInternetChargeType("PayByTraffic")
.setInternetMaxBandwidthOut(1);
@@ -219,7 +219,7 @@ public class Sample implements ApplicationRunner , DisposableBean {
public void destroy(){
try {
log.info("删除实例方法");
- Thread.sleep(100000);
+// Thread.sleep(100000);
deleteSample();
} catch (Exception e) {
log.info("删除实例失败");
From f00c530de13d8b1298d38376e05bb455bfd5d648 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com>
Date: Mon, 7 Oct 2024 09:43:16 +0800
Subject: [PATCH 05/14] =?UTF-8?q?=E6=B7=BB=E5=8A=A0rabbitmq=E7=9A=84?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=B1=BB,=E4=BD=BF=E7=94=A8=E4=BA=A4?=
=?UTF-8?q?=E6=8D=A2=E6=9C=BA=E7=9A=84=E5=B9=BF=E6=92=AD=E6=A8=A1=E5=BC=8F?=
=?UTF-8?q?=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
cloud-common/cloud-common-rabbit/pom.xml | 2 +-
.../rabbit/callback/ConfirmCallback.java | 44 ++++++++++++
.../rabbit/callback/ReturnsCallback.java | 39 ++++++++++
.../rabbit/config/ConfirmCallbackConfig.java | 47 ------------
.../rabbit/config/RabbitAdminConfig.java | 72 +++++++++++++++++++
.../RabbitListenerConfig.java} | 28 +++++---
.../RabbitMQMessageConverterConfig.java | 26 +++++++
.../rabbit/config/ReturnCallbackConfig.java | 42 -----------
...ot.autoconfigure.AutoConfiguration.imports | 4 +-
.../cargateway/config/RabbitmqConfig.java | 14 ++--
.../com/muyu/cargateway/instance/Sample.java | 5 +-
.../Impl/CarOneClickOperationServiceImpl.java | 5 +-
.../src/main/resources/bootstrap.yml | 23 ++++--
13 files changed, 238 insertions(+), 113 deletions(-)
create mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ConfirmCallback.java
create mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ReturnsCallback.java
delete mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java
create mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitAdminConfig.java
rename cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/{RabbitListenerConfigurer.java => config/RabbitListenerConfig.java} (59%)
create mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitMQMessageConverterConfig.java
delete mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java
diff --git a/cloud-common/cloud-common-rabbit/pom.xml b/cloud-common/cloud-common-rabbit/pom.xml
index fa6d383..53ac6d7 100644
--- a/cloud-common/cloud-common-rabbit/pom.xml
+++ b/cloud-common/cloud-common-rabbit/pom.xml
@@ -32,4 +32,4 @@
-
\ No newline at end of file
+
diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ConfirmCallback.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ConfirmCallback.java
new file mode 100644
index 0000000..fe4c6b2
--- /dev/null
+++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ConfirmCallback.java
@@ -0,0 +1,44 @@
+package com.muyu.common.rabbit.callback;
+
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.connection.CorrelationData;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author Lenovo
+ * @Description 消息发送到broker确认回调
+ */
+
+@Slf4j
+@Component
+public class ConfirmCallback implements RabbitTemplate.ConfirmCallback {
+
+ @Resource
+ private RabbitTemplate rabbitTemplate;
+
+ /**
+ * 初始化
+ */
+ @PostConstruct
+ public void init() {
+ this.rabbitTemplate.setConfirmCallback(this);
+ }
+
+ /**
+ * 回调确认方法(消息发送之后 消息无论发送成功还是失败都会执行这个回调方法)
+ * @param correlationData 回调的相关数据
+ * @param ack 确认结果(true表示消息已经被broker接收,false表示消息未被broker接收)
+ * @param cause 失败原因(当ack为false时,表示拒绝接收消息的原因;当ack为true时,该值为空)
+ */
+ @Override
+ public void confirm(CorrelationData correlationData, boolean ack, String cause) {
+ if (ack) {
+ log.info("消息发送到broker成功!");
+ } else {
+ log.info("消息发送到broker失败,失败原因:{}", cause);
+ }
+ }
+}
diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ReturnsCallback.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ReturnsCallback.java
new file mode 100644
index 0000000..6145c2c
--- /dev/null
+++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ReturnsCallback.java
@@ -0,0 +1,39 @@
+package com.muyu.common.rabbit.callback;
+
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.ReturnedMessage;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author Lenovo
+ * @Description 消息发送失败时回调
+ */
+
+@Slf4j
+@Component
+public class ReturnsCallback implements RabbitTemplate.ReturnsCallback {
+
+ @Resource
+ private RabbitTemplate rabbitTemplate;
+
+ /**
+ * 初始化
+ */
+ @PostConstruct
+ public void init() {
+ rabbitTemplate.setReturnsCallback(this);
+ }
+
+ /**
+ * 消息发送到队列失败时执行
+ * @param returnedMessage 返回的消息和元数据
+ */
+ @Override
+ public void returnedMessage(ReturnedMessage returnedMessage) {
+ log.info("消息:{}被交换机:{}回退!回退原因:{}", returnedMessage.getMessage().toString(),
+ returnedMessage.getExchange(), returnedMessage.getReplyText());
+ }
+}
diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java
deleted file mode 100644
index 1e25c6f..0000000
--- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.muyu.common.rabbit.config;
-
-import lombok.extern.log4j.Log4j2;
-import org.springframework.amqp.rabbit.connection.CorrelationData;
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-
-/**
- * @author Lenovo
- */
-@Component
-@Log4j2
-public class ConfirmCallbackConfig implements RabbitTemplate.ConfirmCallback {
-
- @Autowired
- private RabbitTemplate rabbitTemplate;
-
- /**
- * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执
- */
- @PostConstruct
- public void init() {
- rabbitTemplate.setConfirmCallback(this);
- }
-
- /**
- * 交换机不管是否收到消息的一个回调方法
- *
- * @param correlationData 消息相关数据
- * @param ack 交换机是否收到消息
- * @param cause 失败原因
- */
- @Override
- public void confirm(CorrelationData correlationData, boolean ack, String cause) {
- if (!ack) {
- String exchange = correlationData.getReturned().getExchange();
- String message = correlationData.getReturned().getMessage().getBody().toString();
- // 发送异常
- log.error("消息:{},发送到交换机:{}失败,原因是:{}", message, exchange, cause);
- }
- }
-
-}
diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitAdminConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitAdminConfig.java
new file mode 100644
index 0000000..d87c912
--- /dev/null
+++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitAdminConfig.java
@@ -0,0 +1,72 @@
+package com.muyu.common.rabbit.config;
+
+import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Lenovo
+ * @Description RabbitMQ连接和管理功能配置
+ */
+
+@Configuration
+public class RabbitAdminConfig {
+
+ /**
+ * RabbitMQ服务器的主机地址
+ */
+ @Value("${spring.rabbitmq.host}")
+ private String host;
+
+ /**
+ * RabbitMQ的用户名
+ */
+ @Value("${spring.rabbitmq.username}")
+ private String username;
+
+ /**
+ * RabbitMQ的密码
+ */
+ @Value("${spring.rabbitmq.password}")
+ private String password;
+
+ /**
+ * RabbitMQ的虚拟主机
+ */
+ @Value("${spring.rabbitmq.virtualhost}")
+ private String virtualhost;
+
+ /**
+ * 创建并初始化RabbitAdmin实例
+ *
+ * @return RabbitAdmin 实例
+ */
+ @Bean
+ public RabbitAdmin rabbitAdmin() {
+ RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory());
+ rabbitAdmin.setAutoStartup(true);
+ return rabbitAdmin;
+ }
+
+ /**
+ * 创建RabbitMQ连接工厂
+ *
+ * @return ConnectionFactory 实例
+ */
+ @Bean
+ public ConnectionFactory connectionFactory() {
+ CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
+ connectionFactory.setAddresses(host);
+ connectionFactory.setUsername(username);
+ connectionFactory.setPassword(password);
+ connectionFactory.setVirtualHost(virtualhost);
+
+ // 配置发送确认回调时,次配置必须配置,否则即使在RabbitTemplate配置了ConfirmCallback也不会生效
+ connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED);
+ connectionFactory.setPublisherReturns(true);
+ return connectionFactory;
+ }
+}
diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitListenerConfig.java
similarity index 59%
rename from cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java
rename to cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitListenerConfig.java
index 4e250d0..0c99e3f 100644
--- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java
+++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitListenerConfig.java
@@ -1,32 +1,38 @@
-package com.muyu.common.rabbit;
+package com.muyu.common.rabbit.config;
+import org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistrar;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory;
-import javax.annotation.Resource;
-
/**
* @author Lenovo
+ * @Description rabbitMQ的监听器配置
*/
+
@Configuration
-public class RabbitListenerConfigurer implements org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer {
+public class RabbitListenerConfig implements RabbitListenerConfigurer {
static {
+ // 设置为信任所有类型的反序列化,确保消息能够正确反序列化
System.setProperty("spring.amqp.deserialization.trust.all", "true");
}
- //以下配置RabbitMQ消息服务
- @Resource
+ /**
+ * RabbitMQ连接工厂,用于创建连接
+ */
+ @Autowired
public ConnectionFactory connectionFactory;
/**
- * 处理器方法工厂
- * @return
+ * 创建处理器方法工厂的bean
+ *
+ * @return DefaultMessageHandlerMethodFactory 实例,用于处理消息的转换和方法调用
*/
@Bean
public DefaultMessageHandlerMethodFactory handlerMethodFactory() {
@@ -36,8 +42,14 @@ public class RabbitListenerConfigurer implements org.springframework.amqp.rabbit
return factory;
}
+ /**
+ * 配置RabbitMQ监听器的消息处理方法工厂。
+ *
+ * @param rabbitListenerEndpointRegistrar 实例,用于注册监听器的配置
+ */
@Override
public void configureRabbitListeners(RabbitListenerEndpointRegistrar rabbitListenerEndpointRegistrar) {
+ // 注册自定义的消息处理方法工厂
rabbitListenerEndpointRegistrar.setMessageHandlerMethodFactory(handlerMethodFactory());
}
diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitMQMessageConverterConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitMQMessageConverterConfig.java
new file mode 100644
index 0000000..6096282
--- /dev/null
+++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitMQMessageConverterConfig.java
@@ -0,0 +1,26 @@
+
+package com.muyu.common.rabbit.config;
+
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Lenovo
+ * @Description rabbitMQ消息转换器配置
+ */
+
+@Configuration
+public class RabbitMQMessageConverterConfig {
+
+ /**
+ * 消息转换配置
+ *
+ * @return 消息转换器
+ */
+ @Bean
+ public MessageConverter jsonMessageConverter() {
+ return new Jackson2JsonMessageConverter();
+ }
+}
diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java
deleted file mode 100644
index ae17741..0000000
--- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.muyu.common.rabbit.config;
-
-import lombok.extern.log4j.Log4j2;
-import org.springframework.amqp.core.ReturnedMessage;
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * 消息发送到队列的确认
- * @author Lenovo
- */
-@Component
-@Log4j2
-public class ReturnCallbackConfig implements RabbitTemplate.ReturnsCallback {
-
- @Autowired
- private RabbitTemplate rabbitTemplate;
-
- /**
- * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执
- */
- @PostConstruct
- public void init() {
- rabbitTemplate.setReturnsCallback(this);
- }
-
- /**
- * 消息发送失败 则会执行这个方法
- *
- * @param returnedMessage the returned message and metadata.
- */
- @Override
- public void returnedMessage(ReturnedMessage returnedMessage) {
- log.error("消息:{},被交换机:{} 回退!退回原因为:{}",
- returnedMessage.getMessage().toString(), returnedMessage.getExchange(), returnedMessage.getReplyText());
- // TODO 回退了所有的信息,可做补偿机制
- }
-
-}
diff --git a/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 189ea2c..0b13700 100644
--- a/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1,3 @@
-com.muyu.common.rabbit.RabbitListenerConfigurer
\ No newline at end of file
+com.muyu.common.rabbit.config.RabbitListenerConfig
+com.muyu.common.rabbit.config.RabbitAdminConfig
+com.muyu.common.rabbit.config.RabbitMQMessageConverterConfig
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java
index d215a28..75f6e71 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java
@@ -1,5 +1,6 @@
package com.muyu.cargateway.config;
+import lombok.extern.log4j.Log4j2;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Exchange;
@@ -19,6 +20,7 @@ import org.slf4j.LoggerFactory;
* @ Description:rabbitmq配置类
* @author Lenovo
*/
+@Log4j2
@Configuration
public class RabbitmqConfig {
// 日志
@@ -52,10 +54,10 @@ public class RabbitmqConfig {
public Exchange exchangeTopicsInform() {
try {
Exchange exchange = ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build();
- logger.info("创建的交换机为: {}", EXCHANGE_TOPICS_INFORM);
+ log.info("创建的交换机为: {}", EXCHANGE_TOPICS_INFORM);
return exchange;
} catch (Exception e) {
- logger.error("创建该: {} 交换机失败", EXCHANGE_TOPICS_INFORM, e);
+ log.error("创建该: {} 交换机失败", EXCHANGE_TOPICS_INFORM, e);
throw e;
}
}
@@ -65,10 +67,10 @@ public class RabbitmqConfig {
public Queue queueInformEmail() {
try {
Queue queue = new Queue(QUEUE_INFORM_EMAIL);
- logger.info("创建的对列为: {}", QUEUE_INFORM_EMAIL);
+ log.info("创建的队列为: {}", QUEUE_INFORM_EMAIL);
return queue;
} catch (Exception e) {
- logger.error("创建该: {} 队列失败", QUEUE_INFORM_EMAIL, e);
+ log.error("创建该: {} 队列失败", QUEUE_INFORM_EMAIL, e);
throw e;
}
}
@@ -78,10 +80,10 @@ public class RabbitmqConfig {
public Queue queueInformSms() {
try {
Queue queue = new Queue(QUEUE_INFORM_SMS);
- logger.info("创建的对列为: {}", QUEUE_INFORM_SMS);
+ log.info("创建的队列为: {}", QUEUE_INFORM_SMS);
return queue;
} catch (Exception e) {
- logger.error("创建该: {} 队列失败", QUEUE_INFORM_SMS, e);
+ log.error("创建该: {} 队列失败", QUEUE_INFORM_SMS, e);
throw e;
}
}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
index 2ae8802..450e980 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
@@ -85,7 +85,7 @@ public class Sample implements ApplicationRunner , DisposableBean {
// 设置密码
.setPassword("10160810@a")
// 设置要创建的实例数量
- .setAmount(1)
+ .setAmount(2)
.setInternetChargeType("PayByTraffic")
.setInternetMaxBandwidthOut(1);
@@ -109,7 +109,6 @@ public class Sample implements ApplicationRunner , DisposableBean {
// 在获取实例详细信息时,确保获取所有必要的信息
DescribeInstancesResponse describeInstancesResponse = getInstances(client);
List instances = describeInstancesResponse.getBody().getInstances().getInstance();
-
List aliInstances = new ArrayList<>();
instanceIds = new ArrayList<>();
@@ -219,7 +218,7 @@ public class Sample implements ApplicationRunner , DisposableBean {
public void destroy(){
try {
log.info("删除实例方法");
-// Thread.sleep(100000);
+ Thread.sleep(10000);
deleteSample();
} catch (Exception e) {
log.info("删除实例失败");
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java
index 9aa6479..3967b9e 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java
@@ -35,8 +35,11 @@ public class CarOneClickOperationServiceImpl implements CarOneClickOperationServ
@Override
public void getConnect(VehicleConnectionReq vehicleConnectionReq) {
log.info("车辆连接请求:{}",vehicleConnectionReq.toString());
+
// 发送消息
- rabbitTemplate.convertAndSend("exchange_topics_inform","",vehicleConnectionReq.getVehicleVin());
+ rabbitTemplate.convertAndSend("exchange_topics_inform","inform.#.email.#",vehicleConnectionReq.getVehicleVin());
+ log.info("发送消息成功:{}",vehicleConnectionReq.getVehicleVin());
+
VehicleConnection vehicleConnection = new VehicleConnection();
vehicleConnection.setVehicleVin(vehicleConnectionReq.getVehicleVin());
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml
index d9f3d66..93ed008 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml
@@ -4,19 +4,34 @@ server:
# nacos线上地址
nacos:
- addr: 106.54.193.225:8848
+ addr: 47.116.173.119:8848
user-name: nacos
password: nacos
namespace: one
# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
# Spring
spring:
+ rabbitmq:
+ host: 47.116.173.119
+ port: 5672
+ username: guest
+ password: guest
+ virtual-host: /
+ listener:
+ simple:
+ prefetch: 1 # 默认每次取出一条消息消费, 消费完成取下一条
+ acknowledge-mode: manual # 设置消费端手动ack确认
+ retry:
+ enabled: true # 是否支持重试
+ publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange)
+ publisher-returns: true #确认消息已发送到队列(Queue)
amqp:
deserialization:
- trust:
- all: true
+ trust:
+ all: true
main:
- allow-bean-definition-overriding: true
+ allow-bean-definition-overriding: true
+
application:
# 应用名称
name: cloud-car-gateway
From 99be16cde206f58a725985c2b030d079e17d1d02 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com>
Date: Mon, 7 Oct 2024 14:23:45 +0800
Subject: [PATCH 06/14] =?UTF-8?q?=E8=BD=AE=E8=AF=A2=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=E4=B8=80=E6=AC=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../CarOneClickOperationController.java | 7 ++--
.../cargateway/domain/VehicleConnection.java | 8 +++--
.../com/muyu/cargateway/domain/VinIp.java | 4 +--
.../com/muyu/cargateway/instance/Sample.java | 2 +-
.../mapper/CarOneClickOperationMapper.java | 5 +++
.../service/CarOneClickOperationService.java | 3 +-
.../Impl/CarOneClickOperationServiceImpl.java | 34 +++++++++++++++++--
.../mapper/CarOneClickOperationMapper.xml | 5 +++
8 files changed, 56 insertions(+), 12 deletions(-)
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java
index 142bd8c..b6820e7 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java
@@ -1,5 +1,6 @@
package com.muyu.cargateway.controller;
+import com.muyu.cargateway.domain.model.MqttServerModel;
import com.muyu.cargateway.domain.req.VehicleConnectionReq;
import com.muyu.cargateway.service.CarOneClickOperationService;
import com.muyu.common.core.domain.Result;
@@ -33,9 +34,9 @@ public class CarOneClickOperationController {
* @return
*/
@PostMapping("/receiveMsg/connect")
- public Result receiveMsg(@RequestBody VehicleConnectionReq vehicleConnectionReq){
+ public Result receiveMsg(@RequestBody VehicleConnectionReq vehicleConnectionReq){
log.info("=======>"+vehicleConnectionReq);
- carOneClickOperationService.getConnect(vehicleConnectionReq);
- return Result.success();
+ MqttServerModel mqttServerModel =carOneClickOperationService.getConnect(vehicleConnectionReq);
+ return Result.success(mqttServerModel);
}
}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java
index ef3bc10..819d48e 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java
@@ -24,9 +24,13 @@ public class VehicleConnection {
* 用户名
*/
private String username;
-
+ /**
+ * 时间戳
+ */
private String timestamp;
-
+ /**
+ * 随机数
+ */
private String nonce;
/**
* 密码
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java
index 7d37381..b6787f9 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java
@@ -19,9 +19,9 @@ public class VinIp {
/**
* 车辆的vin
*/
- String vin;
+ String vehicleVin;
/**
* 车辆的ip
*/
- String ip;
+ String ipAddress;
}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
index 450e980..6edfac5 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java
@@ -85,7 +85,7 @@ public class Sample implements ApplicationRunner , DisposableBean {
// 设置密码
.setPassword("10160810@a")
// 设置要创建的实例数量
- .setAmount(2)
+ .setAmount(1)
.setInternetChargeType("PayByTraffic")
.setInternetMaxBandwidthOut(1);
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java
index 03eed48..1eb1a2f 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java
@@ -3,6 +3,8 @@ package com.muyu.cargateway.mapper;
import com.muyu.cargateway.domain.VehicleConnection;
import org.apache.ibatis.annotations.Mapper;
+import java.util.List;
+
/**
* @ Tool:IntelliJ IDEA
* @ Author:CHX
@@ -14,4 +16,7 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CarOneClickOperationMapper {
void addConnect(VehicleConnection vehicleConnection);
+
+
+ List selectByVehicleVin(String vehicleVin);
}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java
index 42638a6..71c639f 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java
@@ -1,5 +1,6 @@
package com.muyu.cargateway.service;
+import com.muyu.cargateway.domain.model.MqttServerModel;
import com.muyu.cargateway.domain.req.VehicleConnectionReq;
/**
@@ -17,5 +18,5 @@ public interface CarOneClickOperationService {
* @param vehicleConnectionReq 车辆连接请求参数
* @return
*/
- void getConnect(VehicleConnectionReq vehicleConnectionReq);
+ MqttServerModel getConnect(VehicleConnectionReq vehicleConnectionReq);
}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java
index 3967b9e..5792030 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java
@@ -1,14 +1,19 @@
package com.muyu.cargateway.service.Impl;
import com.muyu.cargateway.domain.VehicleConnection;
+import com.muyu.cargateway.domain.VinIp;
+import com.muyu.cargateway.domain.model.MqttServerModel;
import com.muyu.cargateway.domain.req.VehicleConnectionReq;
import com.muyu.cargateway.mapper.CarOneClickOperationMapper;
import com.muyu.cargateway.service.CarOneClickOperationService;
+import com.muyu.common.redis.service.RedisService;
import lombok.extern.log4j.Log4j2;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.List;
+
/**
* @ Tool:IntelliJ IDEA
* @ Author:CHX
@@ -26,6 +31,8 @@ public class CarOneClickOperationServiceImpl implements CarOneClickOperationServ
@Autowired
private RabbitTemplate rabbitTemplate;
+ @Autowired
+ private RedisService redisService;
/**
* 获取连接信息
@@ -33,18 +40,39 @@ public class CarOneClickOperationServiceImpl implements CarOneClickOperationServ
* @return
*/
@Override
- public void getConnect(VehicleConnectionReq vehicleConnectionReq) {
+ public MqttServerModel getConnect(VehicleConnectionReq vehicleConnectionReq) {
log.info("车辆连接请求:{}",vehicleConnectionReq.toString());
- // 发送消息
+ // 使用交换机发送消息
rabbitTemplate.convertAndSend("exchange_topics_inform","inform.#.email.#",vehicleConnectionReq.getVehicleVin());
log.info("发送消息成功:{}",vehicleConnectionReq.getVehicleVin());
VehicleConnection vehicleConnection = new VehicleConnection();
+ //车辆vin
vehicleConnection.setVehicleVin(vehicleConnectionReq.getVehicleVin());
+ //用户名
vehicleConnection.setUsername(vehicleConnectionReq.getUsername());
+ //密码(vin+时间戳+随机数)
vehicleConnection.setPassword(vehicleConnectionReq.getVehicleVin()+vehicleConnectionReq.getTimestamp()+vehicleConnectionReq.getNonce());
- carOneClickOperationMapper.addConnect(vehicleConnection);
+ //查询车辆vin集合
+ List vehicleConnections =carOneClickOperationMapper.selectByVehicleVin(vehicleConnectionReq.getVehicleVin());
+ if(vehicleConnections.isEmpty()){
+ //添加
+ carOneClickOperationMapper.addConnect(vehicleConnection);
+ }
+ log.info("该车辆已存在,不能重复预上线");
+ //TODO 返回连接信息 做轮询操作
+
+
+ return new MqttServerModel("tcp://"+"106.15.136.7"+":1883","vehicle");
+
}
+ /**
+ * 添加车辆绑定IP地址存入redis中
+ */
+ public void addIpAddress(VinIp vinIp){
+ redisService.setCacheObject("vehicle_ip_address:"+vinIp.getVehicleVin(),vinIp.getIpAddress());
+ }
+
}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml
index 8d3f52d..814cfa2 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml
@@ -11,4 +11,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
values
(#{vehicleVin},#{username},#{password})
+
+
+
From 3180012c6cc58b516ec6a2cda89cb8a30a5768c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com>
Date: Tue, 8 Oct 2024 00:34:28 +0800
Subject: [PATCH 07/14] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=E4=B8=80=E6=AC=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../muyu/cargateway/Aliyun/AliYunConfig.java | 41 ++++
.../Aliyun/service/AliYunEcsService.java | 199 ++++++++++++++++
.../cargateway/CarGatewayApplication.java | 2 +
.../muyu/cargateway/config/AliProperties.java | 55 +++++
.../cargateway/config/RabbitmqConfig.java | 17 +-
.../muyu/cargateway/config/RedisConfig.java | 32 ---
.../cargateway/config/RestTemplateConfig.java | 48 ----
.../muyu/cargateway/domain/AliInstance.java | 3 +
.../cargateway/instance/DeleteSample.java | 34 +++
.../com/muyu/cargateway/instance/Sample.java | 224 +++---------------
.../mapper/CarOneClickOperationMapper.java | 1 -
.../muyu/cargateway/test/DeleteSample.java | 89 -------
.../java/com/muyu/cargateway/test/Sample.java | 120 ----------
.../muyu/cargateway/test/SelectSample.java | 79 ------
.../src/main/resources/bootstrap.yml | 10 +
15 files changed, 384 insertions(+), 570 deletions(-)
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/AliYunConfig.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/service/AliYunEcsService.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/AliProperties.java
delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java
delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RestTemplateConfig.java
create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/DeleteSample.java
delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java
delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java
delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/AliYunConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/AliYunConfig.java
new file mode 100644
index 0000000..489a044
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/AliYunConfig.java
@@ -0,0 +1,41 @@
+package com.muyu.cargateway.Aliyun;
+
+import com.aliyun.ecs20140526.Client;
+import com.aliyun.teaopenapi.models.Config;
+import com.muyu.cargateway.config.AliProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Lenovo
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-10-07-18:40
+ * @ Version:1.0
+ * @ Description: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-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/service/AliYunEcsService.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/service/AliYunEcsService.java
new file mode 100644
index 0000000..753c3e3
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/service/AliYunEcsService.java
@@ -0,0 +1,199 @@
+package com.muyu.cargateway.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.cargateway.config.AliProperties;
+import com.muyu.cargateway.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;
+
+/**
+ * @author Lenovo
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-10-07-18:43
+ * @ Version:1.0
+ * @ Description: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("40");
+ 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("10160810@a")
+ // 设置要创建的实例数量
+ .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-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java
index e9109de..bce08e8 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java
@@ -1,6 +1,7 @@
package com.muyu.cargateway;
import com.muyu.common.security.annotation.EnableCustomConfig;
+import lombok.extern.log4j.Log4j2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
@@ -13,6 +14,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
* @ Description:故障启动类
* @author Lenovo
*/
+@Log4j2
@EnableCustomConfig
@EnableFeignClients
@SpringBootApplication
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/AliProperties.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/AliProperties.java
new file mode 100644
index 0000000..c0ff543
--- /dev/null
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/AliProperties.java
@@ -0,0 +1,55 @@
+package com.muyu.cargateway.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Lenovo
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-10-07-18:34
+ * @ Version:1.0
+ * @ Description:Ali配置类
+ */
+@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-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java
index 75f6e71..734b37f 100644
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java
+++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java
@@ -1,24 +1,20 @@
package com.muyu.cargateway.config;
import lombok.extern.log4j.Log4j2;
-import org.springframework.amqp.core.Binding;
-import org.springframework.amqp.core.BindingBuilder;
-import org.springframework.amqp.core.Exchange;
-import org.springframework.amqp.core.ExchangeBuilder;
-import org.springframework.amqp.core.Queue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
+ * @author Lenovo
* @ Tool:IntelliJ IDEA
* @ Author:CHX
* @ Date:2024-10-04-15:13
* @ Version:1.0
* @ Description:rabbitmq配置类
- * @author Lenovo
*/
@Log4j2
@Configuration
@@ -91,13 +87,14 @@ public class RabbitmqConfig {
//ROUTINGKEY_EMAIL队列绑定交换机,指定routingKey
@Bean
public Binding bindingQueueInformEmail(@Qualifier(QUEUE_INFORM_EMAIL) Queue queue,
- @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){
+ @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_EMAIL).noargs();
}
+
//ROUTINGKEY_SMS队列绑定交换机,指定routingKey
@Bean
public Binding bindingRoutingKeySms(@Qualifier(QUEUE_INFORM_SMS) Queue queue,
- @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){
+ @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_SMS).noargs();
}
}
diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java
deleted file mode 100644
index 7b7304e..0000000
--- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.muyu.cargateway.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;
-
-/**
- * @ Tool:IntelliJ IDEA
- * @ Author:CHX
- * @ Date:2024-10-04-15:12
- * @ Version:1.0
- * @ Description:Redis配置类
- * @author Lenovo
- */
-@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