commit 77ade6288e7ea423a9d109c09f059a62f8746ef9
Author: Yunfei Du <278774021@qq.com>
Date: Fri May 31 11:03:46 2024 +0800
feat:负载中心
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..35410ca
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..63574ec
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..8d66637
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..82dbec8
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..d095040
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,171 @@
+
+
+ 4.0.0
+
+ com.load
+ Load_center
+ 1.0-SNAPSHOT
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+ spring-boot-starter-parent
+ org.springframework.boot
+ 2.6.2
+
+
+
+
+ org.eclipse.paho
+ org.eclipse.paho.client.mqttv3
+ 1.2.5
+
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
+
+ org.apache.commons
+ commons-lang3
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+ io.lettuce
+ lettuce-core
+
+
+
+
+ redis.clients
+ jedis
+
+
+ org.redisson
+ redisson
+ 3.16.0
+
+
+
+ org.apache.httpcomponents
+ httpcore
+ 4.4.12
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.13
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.12.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.2.8
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ provided
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.11
+ runtime
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 2.2.2
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ 1.4.1
+
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ commons-lang
+ commons-lang
+ 2.6
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.79
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-quartz
+
+
+
+ org.projectlombok
+ lombok
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
+
+ com.aliyun
+ ecs20140526
+ 5.1.8
+
+
+
+
diff --git a/src/main/java/com/load/LoadApplication.java b/src/main/java/com/load/LoadApplication.java
new file mode 100644
index 0000000..b50678f
--- /dev/null
+++ b/src/main/java/com/load/LoadApplication.java
@@ -0,0 +1,19 @@
+package com.load;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * 启动类
+ *
+ * @author YunFei·Du
+ * @ClassName: LoadApplication
+ * @Description: 启动类
+ * @CreateTime: 2024/5/27 09:50
+ */
+@SpringBootApplication
+public class LoadApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(LoadApplication.class,args);
+ }
+}
diff --git a/src/main/java/com/load/MqttApplication.java b/src/main/java/com/load/MqttApplication.java
new file mode 100644
index 0000000..cd1def0
--- /dev/null
+++ b/src/main/java/com/load/MqttApplication.java
@@ -0,0 +1,10 @@
+package com.load;
+
+/**
+ * @ClassName MqttApplication
+ * @Description 描述
+ * @Author YunFei.Du
+ * @Date 2024/5/30 9:19
+ */
+public class MqttApplication {
+}
diff --git a/src/main/java/com/load/SubscribeSample.java b/src/main/java/com/load/SubscribeSample.java
new file mode 100644
index 0000000..c58e6c0
--- /dev/null
+++ b/src/main/java/com/load/SubscribeSample.java
@@ -0,0 +1,61 @@
+package com.load;
+
+import org.eclipse.paho.client.mqttv3.*;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+
+/**
+ * 订阅 MQTT 主题
+ */
+public class SubscribeSample {
+ public static void main(String[] args) {
+ /**
+ * 代理地址
+ */
+ String broker = "tcp://39.100.87.192:1883";
+ /**
+ * 主题
+ */
+ String topic = "mqtt/test";
+ String username = "emqx";
+ String password = "public";
+ /**
+ * 客户端ID(随机)
+ */
+ String clientid = "subscribe_client";
+ int qos = 0;
+
+ try {
+ MqttClient client = new MqttClient(broker, clientid, new MemoryPersistence());
+ // 连接参数
+ MqttConnectOptions options = new MqttConnectOptions();
+ options.setUserName(username);
+ options.setPassword(password.toCharArray());
+ options.setConnectionTimeout(60);
+// 堵塞60S
+ options.setKeepAliveInterval(60);
+ // 设置回调
+ client.setCallback(new MqttCallback() {
+
+ public void connectionLost(Throwable cause) {
+ System.out.println("connectionLost: " + cause.getMessage());
+ }
+
+ public void messageArrived(String topic, MqttMessage message) {
+ System.out.println("topic: " + topic);
+ System.out.println("Qos: " + message.getQos());
+ System.out.println("message content: " + new String(message.getPayload()));
+
+ }
+
+ public void deliveryComplete(IMqttDeliveryToken token) {
+ System.out.println("deliveryComplete---------" + token.isComplete());
+ }
+
+ });
+ client.connect(options);
+ client.subscribe(topic, qos);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/com/load/config/InitConnectWeight.java b/src/main/java/com/load/config/InitConnectWeight.java
new file mode 100644
index 0000000..962be25
--- /dev/null
+++ b/src/main/java/com/load/config/InitConnectWeight.java
@@ -0,0 +1,171 @@
+package com.load.config;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.ecs20140526.Client;
+import com.aliyun.ecs20140526.models.DescribeInstancesRequest;
+import com.aliyun.ecs20140526.models.DescribeInstancesResponse;
+import com.aliyun.tea.TeaException;
+import com.aliyun.teautil.models.RuntimeOptions;
+import com.load.domain.ConnectWeight;
+import com.load.util.ECSTool;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.http.*;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 初始化连接权重
+ *
+ * @author YunFei·Du
+ * @ClassName: InitConnectWeight
+ * @Description: 初始化连接权重
+ * @CreateTime: 2024/5/27 21:31
+ */
+@Component
+@Slf4j
+public class InitConnectWeight implements ApplicationRunner {
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+
+ ArrayList connectWeightList = new ArrayList<>();
+
+ ArrayList ipList = new ArrayList<>();
+
+ Client client = null;
+ //获取阿里云客户端
+ try {
+ client = ECSTool.createClient();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ //获取所有实例
+ DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest()
+ .setRegionId("cn-zhangjiakou");
+// .setInstanceType("ecs.e-c1m2.xlarge");
+ RuntimeOptions runtime = new RuntimeOptions();
+ try {
+ // 复制代码运行请自行打印 API 的返回值
+ DescribeInstancesResponse describeInstancesResponse = client.describeInstancesWithOptions(describeInstancesRequest, runtime);
+ List> ipListList = describeInstancesResponse.getBody().instances.getInstance().stream().map(instance -> instance.publicIpAddress.ipAddress).collect(Collectors.toList());
+ for (List strings : ipListList) {
+ for (String ip : strings) {
+ ipList.add(ip);
+ }
+ }
+ } 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);
+ }
+
+
+ //http://fluxmq.muyu.icu/public/login
+
+ //遍历所有ip,获取每一个服务的连接数
+ for (String ip : ipList) {
+ String url = "http://" + ip + ":8080/public/login";
+ Map request = new HashMap<>();
+ request.put("username", "fluxmq");
+ request.put("password", "fluxmq");
+ HttpHeaders httpHeaders = new HttpHeaders();
+ httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+ HttpEntity