fix 完善负载中心 可以简单的进行测压

master
rouchen 2024-06-12 21:22:07 +08:00
parent fec04652bb
commit c6b07df79b
4 changed files with 71 additions and 19 deletions

View File

@ -248,17 +248,16 @@ public class InitConnectWeight implements ApplicationRunner {
.build(); .build();
connectService.LoadCenterAdd(build); connectService.LoadCenterAdd(build);
ArrayList<String> weightIpList = new ArrayList<>(); ArrayList<String> weightIpList = new ArrayList<>();
redisTemplate.delete("ip"); redisTemplate.delete("subscript");
for (int i = 0; i <= max; i++) { for (int i = 0; i <= max; i++) {
for (ConnectWeight connectWeight : connectWeightList) { for (ConnectWeight connectWeight : connectWeightList) {
redisTemplate.opsForList().rightPush("ip", String.valueOf(i)); // log.info("权重值:{}",connectWeight.getWeightValue());
log.info("权重值:{}",connectWeight.getWeightValue());
if (connectWeight.getWeightValue() > i) { if (connectWeight.getWeightValue() > i) {
weightIpList.add(connectWeight.getCarServerIp()); weightIpList.add(connectWeight.getCarServerIp());
}else if (connectWeight.getWeightValue() == max ){ }else if (connectWeight.getWeightValue() == max ){
weightIpList.add(connectWeight.getCarServerIp()); weightIpList.add(connectWeight.getCarServerIp());
log.info("轮询结果:{}",connectWeight.getCarServerIp()); // log.info("轮询结果:{}",connectWeight.getCarServerIp());
} }
} }
} }
@ -269,6 +268,7 @@ public class InitConnectWeight implements ApplicationRunner {
for (String ip : weightIpList) { for (String ip : weightIpList) {
redisTemplate.opsForList().rightPush("ips",ip); redisTemplate.opsForList().rightPush("ips",ip);
} }
redisTemplate.opsForValue().set("subscript","0");
// //每台服务器百分之八十 // //每台服务器百分之八十
// HashMap<String, Double> hashMap = new HashMap<>(){{ // HashMap<String, Double> hashMap = new HashMap<>(){{
// for (String s : ipList) { // for (String s : ipList) {

View File

@ -10,6 +10,7 @@ import com.car.demos.loadenter.Node;
import com.car.demos.loadenter.NodeReq; import com.car.demos.loadenter.NodeReq;
import com.car.demos.req.VehicleConnectionReq; import com.car.demos.req.VehicleConnectionReq;
import com.car.service.ConnectService; import com.car.service.ConnectService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -24,6 +25,7 @@ import java.util.List;
* @author Yangle * @author Yangle
* Date 2024/5/28 21:46 * Date 2024/5/28 21:46
*/ */
@Log4j2
@RestController @RestController
@RequestMapping("/connect") @RequestMapping("/connect")
public class ConnectController { public class ConnectController {
@ -32,7 +34,9 @@ public class ConnectController {
private ConnectService connectService; private ConnectService connectService;
@PostMapping("/getConnect") @PostMapping("/getConnect")
public Result<MqttServerModel>getConnect(@RequestBody VehicleConnectionReq vehicleConnectionReq){ public Result<MqttServerModel>getConnect(@RequestBody VehicleConnectionReq vehicleConnectionReq){
return connectService.getConnect(vehicleConnectionReq); Result<MqttServerModel> connect = connectService.getConnect(vehicleConnectionReq);
log.info("车辆上线的返回值:{}",connect);
return connect;
} }
/** /**

View File

@ -25,4 +25,6 @@ public class MqttServerModel {
* MQTT * MQTT
*/ */
private String topic; private String topic;
} }

View File

@ -17,6 +17,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
/** /**
* ConnectImplImpl * ConnectImplImpl
@ -31,24 +32,69 @@ public class ConnectServiceImpl implements ConnectService {
private ConnerMapper connerMapper; private ConnerMapper connerMapper;
@Autowired @Autowired
private StringRedisTemplate redisTemplate; private StringRedisTemplate redisTemplate;
@Override @Override
public Result<MqttServerModel> getConnect(VehicleConnectionReq vehicleConnectionReq) { public Result<MqttServerModel> getConnect(VehicleConnectionReq vehicleConnectionReq) {
if (redisTemplate.hasKey("Redis")) { // 创建一个ReentrantLock对象
Integer count = Integer.valueOf(redisTemplate.opsForValue().get("ip")); ReentrantLock lock = new ReentrantLock();
if (count == 100){
redisTemplate.opsForValue().set("Redis",String.valueOf(0)); if (redisTemplate.hasKey("subscript")) {
}else { lock.lock(); // 加锁
redisTemplate.opsForValue().set("Redis",String.valueOf(count + 1)); try {
Integer count = Integer.valueOf(redisTemplate.opsForValue().get("subscript"));
if (count == 100) {
redisTemplate.opsForValue().set("subscript", String.valueOf(0));
} else {
redisTemplate.opsForValue().set("subscript", String.valueOf(count + 1));
}
String ip = redisTemplate.opsForList().index("ips", count);
return Result.success(new MqttServerModel("tcp://" + ip + ":1883", "test1"));
} finally {
lock.unlock(); // 释放锁
}
} else {
lock.lock(); // 加锁
try {
redisTemplate.opsForValue().set("subscript", String.valueOf(1));
String ip = redisTemplate.opsForList().index("ips", 0);
return Result.success(new MqttServerModel("tcp://" + ip + ":1883", "test1"));
} finally {
lock.unlock(); // 释放锁
} }
String ip = redisTemplate.opsForList().index("ips", count);
return Result.success(new MqttServerModel("tcp://"+ip+":1883","test1"));
}else {
redisTemplate.opsForValue().set("count",String.valueOf(1));
String ip = redisTemplate.opsForList().index("ips", 0);
return Result.success(new MqttServerModel("tcp://"+ip+":1883","test1"));
} }
// @Override
// public Result<MqttServerModel> getConnect(VehicleConnectionReq vehicleConnectionReq) {
// // 检查Redis中连接次数"count"是否存在
// if (redisTemplate.hasKey("count")){
// // 获取当前连接次数
// Integer count = Integer.valueOf(redisTemplate.opsForValue().get("count"));
// // 当连接次数达到100时重置连接次数为0
// if (count == 100){
// redisTemplate.opsForValue().set("count", String.valueOf(0));
// }else{
// // 连接次数未达到100递增连接次数
// redisTemplate.opsForValue().set("count", String.valueOf(count+1));
// }
// // 根据当前连接次数获取对应的IP地址
// String ip = redisTemplate.opsForList().index("ipList", count);
// long timestamp = System.currentTimeMillis();
// this.insert(new VinIp(vehicleConnectionReq.getVehicleVin(), ip,timestamp));
// // 创建并返回Mqtt服务器模型
// MqttServerModel mqttServerModel = new MqttServerModel("tcp://" + ip + ":1883", "test1");
// return Result.success(mqttServerModel);
// }else{
// // "count"不存在时初始化连接次数为1
// redisTemplate.opsForValue().set("count", String.valueOf(1));
// // 获取列表中的第一个IP地址
// String s = redisTemplate.opsForList().index("ipList", 0);
// long timestamp = System.currentTimeMillis();
// this.insert(new VinIp(vehicleConnectionReq.getVehicleVin(), s,timestamp));
// // 创建并返回第一个IP地址对应的Mqtt服务器模型
// MqttServerModel test1 = new MqttServerModel("tcp://" + s + ":1883", "test1");
// return Result.success(test1);
// }
// }
} }
/** /**
* *