build():添加车辆连接获取车辆信息存入数据库中,发送rabbitmq消息队列

dev.entOperation
liuyibo 2024-10-06 10:57:27 +08:00 committed by xinzirun
parent a1894bb013
commit e018d60115
12 changed files with 318 additions and 10 deletions

View File

@ -107,6 +107,12 @@
<groupId>com.aliyun</groupId>
<artifactId>cloudapi20160714</artifactId>
</dependency>
<!-- rabbitmq模块 -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-rabbit</artifactId>
</dependency>
</dependencies>
<repositories>

View File

@ -0,0 +1,51 @@
package com.muyu.vehiclegateway.controller;
import com.muyu.common.core.domain.Result;
import com.muyu.vehiclegateway.domain.req.VehicleConnectionReq;
import com.muyu.vehiclegateway.service.ConnectService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* @ClassName ConnectController
* @Description
* @Author YiBo.Liu
* @Date 2024/10/2 16:25
*/
@RequestMapping("/vehicleGateway")
@RestController
@Log4j2
@Tag(name = "连接车辆控制层")
public class ConnectController {
@Autowired
private ConnectService connectService;
/**
*
* @param vehicleConnectionReq
* @return
*/
@PostMapping("/receiveMsg/connect")
private Result receiveMsg(@RequestBody VehicleConnectionReq vehicleConnectionReq){
log.info("=======>" + vehicleConnectionReq);
connectService.receiveMsg(vehicleConnectionReq);
return Result.success();
}
/**
* ECS
* @throws Exception
*/
@GetMapping("/createConnect")
private void createConnect() throws Exception {
connectService.createConnect();
log.info("创建实例成功");
}
}

View File

@ -0,0 +1,37 @@
package com.muyu.vehiclegateway.domain;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @ClassName ConnectMemory
* @Description 使
* @Author YiBo.Liu
* @Date 2024/10/4 11:02
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Tag(name = "服务器内存使用情况")
public class ConnectMemory {
/**
* ID
*/
private String clusterId;
/**
* IP
*/
private String ipAddress;
/**
*
*/
private String remainingNum;
}

View File

@ -0,0 +1,37 @@
package com.muyu.vehiclegateway.domain;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @ClassName Instance
* @Description
* @Author YiBo.Liu
* @Date 2024/9/30 20:42
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Tag(name = "服务器数据")
public class Instance {
/**
* ID
*/
private String instanceId;
/**
* IP
*/
private String ipAddress;
/**
*
*/
private String status;
}

View File

@ -0,0 +1,32 @@
package com.muyu.vehiclegateway.domain;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @ClassName MqttServerModel
* @Description
* @Author YiBo.Liu
* @Date 2024/10/4 14:49
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Tag(name = "mqtt服务器模型")
public class MqttServerModel {
/**
* MQTT
*/
private String broker;
/**
* MQTT
*/
private String topic;
}

View File

@ -0,0 +1,44 @@
package com.muyu.vehiclegateway.domain.req;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @ClassName VehicleConnectionReq
* @Description
* @Author YiBo.Liu
* @Date 2024/10/2 16:10
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class VehicleConnectionReq {
/**
* id
*/
private Integer id;
/**
* vin
*/
@JSONField(name = "vehicleVin")
private String vehicleVin;
/**
*
*/
private String timestamp;
/**
*
*/
private String nonce;
}

View File

@ -9,13 +9,12 @@ import com.aliyun.tea.TeaException;
import com.aliyun.teautil.Common;
import com.aliyun.teautil.models.RuntimeOptions;
import com.muyu.common.redis.service.RedisService;
import com.muyu.vehiclegateway.domain.Instance;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.log4j.Log4j2;
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.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
@ -23,7 +22,7 @@ import java.util.List;
/**
* @ClassName GenerateInstance
* @Description
* @Description ECS
* @Author YiBo.Liu
* @Date 2024/9/28 19:39
*/
@ -40,7 +39,7 @@ public class GenerateInstance implements ApplicationRunner {
*
* @throws Exception
*/
public List<String> generateInstance() throws Exception {
public List<Instance> generateInstance() throws Exception {
// 创建ECS客户端对象用于后续调用ECS相关API
Client client = CreateClient.createClient();
@ -52,7 +51,7 @@ public class GenerateInstance implements ApplicationRunner {
// 设置地域ID
.setRegionId("cn-shanghai")
// 设置镜像ID
.setImageId("m-uf63thq7h50ng72jpoq2")
.setImageId("m-uf6f7atj16s3cjn9q5l8")
// 设置实例类型
.setInstanceType("ecs.t6-c1m1.large")
// 设置安全组ID
@ -105,27 +104,29 @@ public class GenerateInstance implements ApplicationRunner {
DescribeInstancesResponse describeInstancesResponse = client.describeInstancesWithOptions(describeInstancesRequest, runtimeOptions);
//提取实例ID集合
ArrayList<String> list = new ArrayList<>();
List<Instance> list = new ArrayList<>();
DescribeInstancesResponseBody body = describeInstancesResponse.getBody();
for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()) {
list.add(instance.getInstanceId());
list.add(instance.getPublicIpAddress().ipAddress.get(0));
list.add(instance.getStatus());
log.info("实例id为:"+instance.getInstanceId());
log.info("实例ip为:"+instance.getPublicIpAddress().ipAddress.get(0));
log.info("实例状态为:"+instance.getStatus());
Instance instance1 = new Instance(instance.getInstanceId(), instance.getPublicIpAddress().ipAddress.get(0), instance.getStatus());
list.add(instance1);
}
redisService.setCacheList("shili",list);
// Thread.sleep(20000);
// redisService.setCacheList("aaa",list);
return list;
}
@Override
public void run(ApplicationArguments args) throws Exception {
generateInstance();

View File

@ -0,0 +1,10 @@
package com.muyu.vehiclegateway.mapper;
import com.muyu.vehiclegateway.domain.req.VehicleConnectionReq;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ConnectMapper {
void addVehicle(VehicleConnectionReq vehicleConnectionReq);
}

View File

@ -0,0 +1,21 @@
package com.muyu.vehiclegateway.service;
import com.muyu.vehiclegateway.domain.req.VehicleConnectionReq;
public interface ConnectService {
/**
*
* @throws Exception
*/
void createConnect() throws Exception;
/**
*
* @param vehicleConnectionReq
* @return
*/
void receiveMsg(VehicleConnectionReq vehicleConnectionReq);
}

View File

@ -0,0 +1,57 @@
package com.muyu.vehiclegateway.service.impl;
import cn.hutool.json.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.muyu.common.core.constant.GenConstants;
import com.muyu.common.core.utils.uuid.UUID;
import com.muyu.vehiclegateway.domain.req.VehicleConnectionReq;
import com.muyu.vehiclegateway.instance.GenerateInstance;
import com.muyu.vehiclegateway.mapper.ConnectMapper;
import com.muyu.vehiclegateway.service.ConnectService;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import static io.lettuce.core.pubsub.PubSubOutput.Type.message;
/**
* @ClassName ConnectServiceImpl
* @Description
* @Author YiBo.Liu
* @Date 2024/10/2 16:25
*/
@Service
public class ConnectServiceImpl implements ConnectService {
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private ConnectMapper connectMapper;
/**
*
* @throws Exception
*/
@Override
public void createConnect() throws Exception {
GenerateInstance generateInstance = new GenerateInstance();
generateInstance.generateInstance();
}
/**
*
* @param vehicleConnectionReq
* @return
*/
@Override
public void receiveMsg(VehicleConnectionReq vehicleConnectionReq) {
rabbitTemplate.convertAndSend("GO_OFFLINE", vehicleConnectionReq.getVehicleVin(),message1 -> {
message1.getMessageProperties().setMessageId(UUID.fastUUID().toString());
return message1;
});
connectMapper.addVehicle(vehicleConnectionReq);
}
}

View File

@ -40,6 +40,8 @@ spring:
file-extension: yml
# 共享配置
shared-configs:
# rabbitmq配置
- application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
# 系统共享配置
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
# 系统环境Config共享配置

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.muyu.vehiclegateway.mapper.ConnectMapper">
<insert id="addVehicle">
insert into connect(id,vehicle_vin,timestamp,nonce)
values (#{id},#{vehicleVin},#{timestamp},#{nonce})
</insert>
</mapper>