diff --git a/pom.xml b/pom.xml index d162aba..9bb635c 100644 --- a/pom.xml +++ b/pom.xml @@ -53,6 +53,32 @@ jakarta.validation-api 2.0.2 + + + org.springframework.boot + spring-boot-starter-amqp + 2.6.2 + + + org.springframework.boot + spring-boot-starter-data-redis + 2.7.15 + + + com.dragon + dragon-common-core + 3.6.4 + + + com.dragon + dragon-common-redis + 3.6.3 + + + com.alibaba + fastjson + 2.0.32 + diff --git a/src/main/java/com/vehicle/controller/VehicleOnlineController.java b/src/main/java/com/vehicle/controller/VehicleOnlineController.java index 6eaab3d..0aa1bb6 100644 --- a/src/main/java/com/vehicle/controller/VehicleOnlineController.java +++ b/src/main/java/com/vehicle/controller/VehicleOnlineController.java @@ -3,6 +3,7 @@ package com.vehicle.controller; import com.vehicle.domain.common.req.VehicleOnlineReq; import com.vehicle.service.VehicleService; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -23,6 +24,7 @@ public class VehicleOnlineController { @Autowired private VehicleService vehicleService; + /** * 将车辆在线请求转换为车辆在线对象 * @@ -30,9 +32,9 @@ public class VehicleOnlineController { */ @PostMapping("/online") public String vehicleOnline(@RequestBody @Validated VehicleOnlineReq vehicleOnlineReq) { - vehicleService.vehicleOnline(vehicleOnlineReq); + String topic = vehicleService.vehicleOnline(vehicleOnlineReq); //返回该车辆的主题 - return "topic_"+vehicleOnlineReq.getVin(); + return topic; } diff --git a/src/main/java/com/vehicle/domain/common/req/VehicleOnlineReq.java b/src/main/java/com/vehicle/domain/common/req/VehicleOnlineReq.java index 2080a13..f3210f5 100644 --- a/src/main/java/com/vehicle/domain/common/req/VehicleOnlineReq.java +++ b/src/main/java/com/vehicle/domain/common/req/VehicleOnlineReq.java @@ -49,6 +49,5 @@ public class VehicleOnlineReq { /** * 车辆登陆密码 */ - @NotNull(message = "密码不能为空") private String password; } diff --git a/src/main/java/com/vehicle/service/VehicleService.java b/src/main/java/com/vehicle/service/VehicleService.java index adbd86a..77a4330 100644 --- a/src/main/java/com/vehicle/service/VehicleService.java +++ b/src/main/java/com/vehicle/service/VehicleService.java @@ -11,6 +11,6 @@ import com.vehicle.domain.common.req.VehicleOnlineReq; * @date 2023/11/27 14:26 */ public interface VehicleService extends IService { - void vehicleOnline(VehicleOnlineReq vehicleOnlineReq); + String vehicleOnline(VehicleOnlineReq vehicleOnlineReq); } diff --git a/src/main/java/com/vehicle/service/impl/VehicleServiceImpl.java b/src/main/java/com/vehicle/service/impl/VehicleServiceImpl.java index 8581bbc..c3d7cca 100644 --- a/src/main/java/com/vehicle/service/impl/VehicleServiceImpl.java +++ b/src/main/java/com/vehicle/service/impl/VehicleServiceImpl.java @@ -1,12 +1,16 @@ package com.vehicle.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - +import com.dragon.common.redis.service.RedisService; import com.vehicle.domain.common.req.VehicleOnlineReq; import com.vehicle.mapper.VehicleOnlineMapper; import com.vehicle.service.VehicleService; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.UUID; + import static com.vehicle.utils.Md5Util.md5Encrypt; @@ -18,23 +22,33 @@ import static com.vehicle.utils.Md5Util.md5Encrypt; */ @Service public class VehicleServiceImpl extends ServiceImpl implements VehicleService { + + @Autowired + private RabbitTemplate rabbitTemplate; + @Autowired + private RedisService redisService; + /** * 车辆上线请求的回调函数 * * @param vehicleOnlineReq 车辆上线请求参数 */ @Override - public void vehicleOnline(VehicleOnlineReq vehicleOnlineReq) { + public String vehicleOnline(VehicleOnlineReq vehicleOnlineReq) { + String vin = vehicleOnlineReq.getVin(); String username = vehicleOnlineReq.getUsername(); String time = System.currentTimeMillis() + ""; -// String time = vehicleOnlineReq.getOnlineTime().getTime() + ""; - String message=vin+time+username; // 拼接所要加密消息 + String message = vin + time + username; // 拼接所要加密消息 String password = md5Encrypt(message); // 加密 vehicleOnlineReq.setPassword(password); this.save(vehicleOnlineReq); + rabbitTemplate.convertAndSend("sub_top", "topic_" + vehicleOnlineReq.getVin(), msg -> { + msg.getMessageProperties().setMessageId(UUID.randomUUID().toString().replaceAll("-", "")); + return msg; + }); + return "topic_" + vehicleOnlineReq.getVin(); } - } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 560b763..4370e3d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,4 +1,8 @@ spring: + redis: + host: 10.100.1.2 + port: 6379 + password: application: name: mqttDemo datasource: @@ -6,5 +10,18 @@ spring: url: jdbc:mysql://124.221.216.186:3306/mqtt?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 username: root password: 27a9601cb3545824 + rabbitmq: + host: 182.254.222.21 + port: 5672 + template: + mandatory: true + listener: + simple: + prefetch: 1 # 每次取一条消息消费 消费完成取下一条 + acknowledge-mode: manual # 设置消费端手动ack确认 + retry: + enabled: true # 支持重试 + publisher-confirms: true #确认消息已发送到交换机(Exchange) + publisher-returns: true #确认消息已发送到队列(Queue) server: - port: 8066 + port: 8067