From c8591c3fd684dbd606f17d6f47fe63ee8812690e Mon Sep 17 00:00:00 2001 From: Yunfei Du <278774021@qq.com> Date: Thu, 30 May 2024 20:31:32 +0800 Subject: [PATCH] =?UTF-8?q?feat():RabbitMq=E7=9B=91=E5=90=AC=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/uiDesigner.xml | 124 ++++++++++++++++ .../common/{req => }/ConnectWeight.java | 2 +- .../com/zhiLian/config/InitConnectWeight.java | 136 ++++++++++++++++++ .../com/zhiLian/consumer/ReceiveHandler.java | 34 +++++ .../controller/LoadBalanceController.java | 2 +- .../main/java/com/zhiLian/utils/ECSTool.java | 17 +-- 6 files changed, 302 insertions(+), 13 deletions(-) create mode 100644 .idea/uiDesigner.xml rename ZhiLian-LoadBalancing/src/main/java/com/zhiLian/common/{req => }/ConnectWeight.java (92%) create mode 100644 ZhiLian-LoadBalancing/src/main/java/com/zhiLian/config/InitConnectWeight.java create mode 100644 ZhiLian-LoadBalancing/src/main/java/com/zhiLian/consumer/ReceiveHandler.java diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/common/req/ConnectWeight.java b/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/common/ConnectWeight.java similarity index 92% rename from ZhiLian-LoadBalancing/src/main/java/com/zhiLian/common/req/ConnectWeight.java rename to ZhiLian-LoadBalancing/src/main/java/com/zhiLian/common/ConnectWeight.java index ad293d5..5bf15fd 100644 --- a/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/common/req/ConnectWeight.java +++ b/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/common/ConnectWeight.java @@ -1,4 +1,4 @@ -package com.zhiLian.common.req; +package com.zhiLian.common; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/config/InitConnectWeight.java b/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/config/InitConnectWeight.java new file mode 100644 index 0000000..b62912b --- /dev/null +++ b/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/config/InitConnectWeight.java @@ -0,0 +1,136 @@ +//package com.zhiLian.config; +// +// +//import com.alibaba.fastjson2.JSON; +//import com.alibaba.fastjson2.JSONArray; +//import com.alibaba.fastjson2.JSONObject; +//import com.aliyun.ecs20140526.Client; +//import com.zhiLian.common.ConnectWeight; +//import com.zhiLian.service.impl.LoadBalanceServiceImpl; +//import com.zhiLian.utils.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.*; +// +// +///** +// * 初始化连接权重 +// * +// * @author YouChe·He +// * @ClassName: InitConnectWeight +// * @Description: 初始化连接权重 +// * @CreateTime: 2024/5/27 21:31 +// */ +//@Component +//@Slf4j +//public class InitConnectWeight implements ApplicationRunner { +// +// @Autowired +// private RedisTemplate redisTemplate; +// +// @Autowired +// private RestTemplate restTemplate; +// @Autowired +// private LoadBalanceServiceImpl loadBalanceServiceimpl; +// +// @Override +// public void run(ApplicationArguments args) throws Exception { +// +// ArrayList connectWeightList = new ArrayList<>(); +// +// +// Client client = null; +// //获取阿里云客户端 +// try { +// client = ECSTool.createClient(); +// } catch (Exception e) { +// throw new RuntimeException(e); +// } +// //获取所有实例 +// List< String > ipList = ECSTool.FindInstance ( "cn-zhangjiakou" ); +// +// +// //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> r = new HttpEntity>(request, httpHeaders); +// String result = restTemplate.postForObject(url, r, String.class); +// +// +// //http://fluxmq.muyu.icu/public/cluster +// +// int nextInt = new Random().nextInt(1000); +// String getInfoUrl = "http://" + ip + ":8080/public/cluster?random=" + nextInt; +// +// HttpHeaders httpHeadersGetInfo = new HttpHeaders(); +// httpHeadersGetInfo.setContentType(MediaType.APPLICATION_JSON); +// httpHeadersGetInfo.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); +// httpHeadersGetInfo.set("Cookie", result); +// HttpEntity getInfoRequest = new HttpEntity(httpHeadersGetInfo); +// ResponseEntity responseInfo = restTemplate.exchange(getInfoUrl, HttpMethod.GET, getInfoRequest, String.class, 1); +// +// log.error("响应是:{}", responseInfo.getBody()); +// +// JSONArray jsonArray = JSON.parseArray(responseInfo.getBody()); +// if (jsonArray.size() > 0) { +// +// JSONObject jsonObject = jsonArray.getJSONObject(0); +// Integer connectSize = Integer.valueOf(jsonObject.getJSONObject("mqttInfo").getString("connectSize")); +// connectWeightList.add(new ConnectWeight(ip,100-connectSize)); +// log.error("链接数量:{}", connectSize); +// } else { +// log.error("得到的相应数据为null"); +// } +// } +// Integer sum =0; +// for (ConnectWeight connectWeight : connectWeightList) { +// sum = sum + connectWeight.getWeightValue(); +// } +// +// int max = 0; +// for (ConnectWeight connectWeight : connectWeightList) { +// log.error("权重值:{}",connectWeight.getWeightValue()); +// Integer result = BigDecimal.valueOf(connectWeight.getWeightValue() * 100).divide(BigDecimal.valueOf(sum), 0, RoundingMode.DOWN).intValue(); +// if (result > max){ +// max = result; +// } +// connectWeight.setWeightValue(result); +// log.error("100次轮询次数:{}",result); +// } +// +// ArrayList weightIpList = new ArrayList<>(); +// +// //轮询出现次数 +// for (int i = 0; i <= max; i++) { +// for (ConnectWeight connectWeight : connectWeightList) { +// if (connectWeight.getWeightValue() > i){ +// weightIpList.add(connectWeight.getCarServerIp()); +// }else if (connectWeight.getWeightValue() == max){ +// weightIpList.add(connectWeight.getCarServerIp()); +// } +// } +// } +// +// //存入redis +// redisTemplate.delete("ipList"); +// for (String ip : weightIpList) { +// redisTemplate.opsForList().rightPush("ipList",ip); +// } +// } +//} diff --git a/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/consumer/ReceiveHandler.java b/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/consumer/ReceiveHandler.java new file mode 100644 index 0000000..8917175 --- /dev/null +++ b/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/consumer/ReceiveHandler.java @@ -0,0 +1,34 @@ +package com.zhiLian.consumer; + +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +/** + * @ClassName ReceiveHandler + * @Description 描述 + * @Author YunFei.Du + * @Date 2024/5/29 20:08 + */ +@Component +@Log4j2 +public class ReceiveHandler { + @Autowired + private RedisTemplate redisTemplate; + +// test + @RabbitListener(queues = {"ADD_LOG_AAA"}) + public void addLog(String msg) { + log.info("接收到消息:{}", msg); + redisTemplate.opsForList().leftPush("log", msg); + } + + @RabbitListener(queues = {"test"}) + public void receiveSms(Message message) { + log.info("接收到消息:{}", message); + redisTemplate.opsForList().leftPush("log", message); + } +} diff --git a/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/controller/LoadBalanceController.java b/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/controller/LoadBalanceController.java index f197778..1423292 100644 --- a/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/controller/LoadBalanceController.java +++ b/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/controller/LoadBalanceController.java @@ -4,7 +4,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.zhiLian.common.Result; -import com.zhiLian.common.req.ConnectWeight; +import com.zhiLian.common.ConnectWeight; import com.zhiLian.service.LoadBalanceService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; diff --git a/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/utils/ECSTool.java b/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/utils/ECSTool.java index e1cb4c1..bcc298b 100644 --- a/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/utils/ECSTool.java +++ b/ZhiLian-LoadBalancing/src/main/java/com/zhiLian/utils/ECSTool.java @@ -1,24 +1,14 @@ package com.zhiLian.utils; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONArray; -import com.alibaba.fastjson2.JSONObject; import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.*; import com.aliyun.tea.TeaException; -import com.aliyun.tea.TeaModel; import com.aliyun.teaopenapi.models.Config; -import com.aliyun.teautil.Common; import com.aliyun.teautil.models.RuntimeOptions; -import com.zhiLian.common.req.ConnectWeight; import lombok.extern.log4j.Log4j2; -import org.springframework.http.*; -import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; -import java.util.stream.IntStream; /** @@ -140,7 +130,12 @@ public class ECSTool { } - + /** + * 查询实例列表 + * @param regionId + * @return + * @throws Exception + */ public static List FindInstance( String regionId) throws Exception { // 创建ECS客户端 Client client = ECSTool.createClient ( );