协议解析:完成解析方法实现kafka的投产,并拆入自己的模块

master
Aaaaaaaa 2024-09-30 20:58:08 +08:00
parent 7a88f1da14
commit 735e7f56e0
42 changed files with 1476 additions and 65 deletions

View File

@ -7,7 +7,7 @@ nacos:
addr: 127.0.0.1:8848 addr: 127.0.0.1:8848
user-name: nacos user-name: nacos
password: nacos password: nacos
namespace: eight namespace: xxy
# Spring # Spring
spring: spring:
application: application:

View File

@ -7,7 +7,7 @@ nacos:
addr: 127.0.0.1:8848 addr: 127.0.0.1:8848
user-name: nacos user-name: nacos
password: nacos password: nacos
namespace: eight namespace: xxy
# Spring # Spring
spring: spring:

View File

@ -0,0 +1,2 @@
Spring Boot Version: ${spring-boot.version}
Spring Application Name: ${spring.application.name}

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/cloud-carData"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.muyu" level="info"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<root level="info">
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
</configuration>

View File

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/cloud-carData"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.sky.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 使用gRpc将日志发送到skywalking服务端 -->
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${log.sky.pattern}</Pattern>
</layout>
</encoder>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.muyu" level="info"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<root level="info">
<appender-ref ref="GRPC_LOG"/>
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
</configuration>

View File

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/cloud-carData"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.sky.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 使用gRpc将日志发送到skywalking服务端 -->
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${log.sky.pattern}</Pattern>
</layout>
</encoder>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.muyu" level="info"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<root level="info">
<appender-ref ref="GRPC_LOG"/>
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
</configuration>

View File

@ -11,6 +11,7 @@ import java.util.function.Supplier;
/** /**
* *
*
* @author 17353 * @author 17353
*/ */
@Data @Data
@ -68,8 +69,11 @@ public class CarMessage {
*/ */
private Integer carMessageState; private Integer carMessageState;
private String carMessageName;
/** /**
* *
*
* @param carMessage * @param carMessage
* @param supplier * @param supplier
* @return * @return
@ -92,6 +96,7 @@ public class CarMessage {
/** /**
* *
*
* @param carMessage * @param carMessage
* @return * @return
*/ */
@ -127,7 +132,4 @@ public class CarMessage {
*/ */
} }

View File

@ -0,0 +1,17 @@
package com.muyu.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class KafKaData {
private String key;
private String type;
private String label;
private String value;
}

View File

@ -28,6 +28,12 @@
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> </dependency>
<!-- mqttv3 -->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>
<!-- SpringCloud Alibaba Nacos Config --> <!-- SpringCloud Alibaba Nacos Config -->
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
@ -38,17 +44,6 @@
<groupId>org.apache.kafka</groupId> <groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId> <artifactId>kafka-clients</artifactId>
</dependency> </dependency>
<!--远调端Feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- mqttv3 -->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>
<!-- SpringCloud Alibaba Sentinel --> <!-- SpringCloud Alibaba Sentinel -->
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
@ -103,7 +98,6 @@
<groupId>com.muyu</groupId> <groupId>com.muyu</groupId>
<artifactId>cloud-common-kafka</artifactId> <artifactId>cloud-common-kafka</artifactId>
<version>3.6.3</version> <version>3.6.3</version>
<scope>compile</scope>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -1,18 +0,0 @@
//package com.muyu.server.feign;
//
//import org.springframework.cloud.openfeign.FeignClient;
//import org.springframework.web.bind.annotation.GetMapping;
//
//@FeignClient(name = "cloud-modules-carData",value = "KafkaProducerController")
//public abstract class KafkaClient {
// /**
// * 处理"/produceTest"的GET请求用于执行特定的测试任务
// * 此方法的具体实现将在子类中定义
// * @return 返回类型为String表示该方法的执行结果
// * @return
// */
// @GetMapping("/produceTest")
// public abstract String produceTest();
//
//
//}

View File

@ -53,11 +53,4 @@ public interface CarMessageService extends IService<CarMessage> {
* *
*/ */
JSONObject inciseCarMessage(String testString); JSONObject inciseCarMessage(String testString);
List<CarMessage> selectCarMessageList(int i, int i1);
} }

View File

@ -110,14 +110,6 @@ public class CarMessageServiceImpl
return null; return null;
} }
@Override
public List<CarMessage> selectCarMessageList(int id, int modelCode) {
LambdaQueryWrapper<CarMessage> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CarMessage::getCarMessageId, id);
queryWrapper.eq(CarMessage::getCarMessageType, modelCode);
return this.list(queryWrapper);
}
//报文处理 //报文处理

View File

@ -26,7 +26,7 @@ public class MessageDao {
} }
public void sendMessage(Message message) throws Exception{ public void sendMessage(Message message) throws Exception{
String sql="INSERT INTO `eight`.`car_fault_message` (`id`, `sender`, `receiver`, `content`, `status`, `create_time`, `user_id`) " + String sql="INSERT INTO `xxy`.`car_fault_message` (`id`, `sender`, `receiver`, `content`, `status`, `create_time`, `user_id`) " +
"VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL)"; "VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL)";
try(PreparedStatement pstmt=connection.prepareStatement(sql)){ try(PreparedStatement pstmt=connection.prepareStatement(sql)){
pstmt.setString(1, message.getContent()); pstmt.setString(1, message.getContent());

View File

@ -4,7 +4,7 @@ server:
# nacos线上地址 # nacos线上地址
nacos: nacos:
addr: 127.0.0.1:8848 addr: 159.75.188.178:8848
user-name: nacos user-name: nacos
password: nacos password: nacos
namespace: eight namespace: eight

View File

@ -7,7 +7,7 @@ nacos:
addr: 127.0.0.1:8848 addr: 127.0.0.1:8848
user-name: nacos user-name: nacos
password: nacos password: nacos
namespace: eight namespace: xxy
# Spring # Spring
spring: spring:

View File

@ -7,7 +7,7 @@ nacos:
addr: 127.0.0.1:8848 addr: 127.0.0.1:8848
user-name: nacos user-name: nacos
password: nacos password: nacos
namespace: eight namespace: xxy
# Spring # Spring
spring: spring:

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>cloud-modules</artifactId>
<version>3.6.3</version>
</parent>
<artifactId>cloud-modules-protocolparsing</artifactId>
<dependencies>
<!--远调端Feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- mqttv3 -->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--apache.kafka<-->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- SpringBoot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- MuYu Common DataSource -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-datasource</artifactId>
</dependency>
<!-- MuYu Common DataScope -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-datascope</artifactId>
</dependency>
<!-- MuYu Common Log -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-log</artifactId>
</dependency>
<!-- 接口模块 -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-api-doc</artifactId>
</dependency>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-modules-enterprise-common</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-boot-starter</artifactId>
<version>1.4.13</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-kafka</artifactId>
<version>3.6.3</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

View File

@ -0,0 +1,15 @@
package com.muyu;
import com.muyu.common.security.annotation.EnableMyFeignClients;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableMyFeignClients
@SpringBootApplication
public class ProtocolApplication {
public static void main(String[] args) {
SpringApplication.run(ProtocolApplication.class, args);
}
}

View File

@ -0,0 +1,38 @@
package com.muyu.controller;
import com.muyu.common.core.domain.Result;
import com.muyu.domain.CarMessage;
import com.muyu.service.CarMessageService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.log4j.Log4j2;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
*
*/
@Log4j2
@RestController
@RequestMapping("/carMessage")
@Tag(name = "信息报文模块" )
public class CarMessageController {
/**
*
*/
}

View File

@ -0,0 +1,135 @@
package com.muyu.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.function.Supplier;
/**
*
*
* @author 17353
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Tag(name = "车辆报文模板实体类")
@TableName(value = "car_message", autoResultMap = true)
public class CarMessage {
//报文类型模块表
/**
*
*/
private Long messageTypeId;
/**
*
*/
private String messageTypeCode;
/**
*
*/
private String messageTypeName;
/**
*
*/
private String messageTypeBelongs;
//报文拆分位置主表
/**
*
*/
private Long carMessageId;
/**
*
*/
private Integer carMessageCartype;
/**
*
*/
private Integer carMessageType;
/**
*
*/
private Integer carMessageStartIndex;
/**
*
*/
private Integer carMessageEndIndex;
/**
* ( )
*/
private String messageTypeClass;
/**
* (0 1)
*/
private Integer carMessageState;
private String carMessageName;
/**
*
*
* @param carMessage
* @param supplier
* @return
*/
public static CarMessage carMessageUpdBuilder(CarMessage carMessage, Supplier<Long> supplier) {
return CarMessage.builder()
.messageTypeId(supplier.get())
.messageTypeCode(carMessage.messageTypeCode)
.messageTypeName(carMessage.messageTypeName)
.messageTypeBelongs(carMessage.messageTypeBelongs)
.carMessageId(carMessage.carMessageId)
.carMessageCartype(carMessage.carMessageCartype)
.carMessageType(carMessage.carMessageType)
.carMessageStartIndex(carMessage.carMessageStartIndex)
.carMessageEndIndex(carMessage.carMessageEndIndex)
.messageTypeClass(carMessage.messageTypeClass)
.carMessageState(carMessage.carMessageState)
.build();
}
/**
*
*
* @param carMessage
* @return
*/
public static CarMessage carMessageAddBuilder(CarMessage carMessage) {
return CarMessage.builder()
.messageTypeCode(carMessage.messageTypeCode)
.messageTypeName(carMessage.messageTypeName)
.messageTypeBelongs(carMessage.messageTypeBelongs)
.carMessageId(carMessage.carMessageId)
.carMessageCartype(carMessage.carMessageCartype)
.carMessageType(carMessage.carMessageType)
.carMessageStartIndex(carMessage.carMessageStartIndex)
.carMessageEndIndex(carMessage.carMessageEndIndex)
.messageTypeClass(carMessage.messageTypeClass)
.carMessageState(carMessage.carMessageState)
.build();
}
/*
private Long messageTypeId ;
private String messageTypeCode ;
private String messageTypeName ;
private String messageTypeBelongs ;
private String messageTypeClass ;
private Long carMessageId ;
private Integer carMessageCartype ;
private Integer carMessageType ;
private Integer carMessageStartIndex ;
private Integer carMessageEndIndex ;
private Integer carMessageState ;
*/
}

View File

@ -0,0 +1,43 @@
package com.muyu.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
* @Author
* @Packagecom.muyu.warn.domain.car
* @Projectcloud-server-8
* @nameCarMessage
* @Date2024/9/22 3:07
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Tag(name = "车辆报文所属类型")
@TableName(value = "car_message_type",autoResultMap = true)
public class CarMessageType {
/**
*
*/
private Integer messageTypeId ;
/**
*
*/
private String messageTypeCode ;
/**
*
*/
private String messageTypeName ;
/**
*
*/
private String messageTypeBelongs ;
}

View File

@ -0,0 +1,17 @@
package com.muyu.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class KafKaData {
private String key;
private String type;
private String label;
private String value;
}

View File

@ -0,0 +1,57 @@
package com.muyu.domain.resp;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* ()
* @Author
* @Packagecom.muyu.warn.domain.car
* @Projectcloud-server-8
* @nameresp
* @Date2024/9/22 7:12
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Tag(name = "车辆报文信息")
public class CarMessageResp {
/**
*
*/
private Integer carMessageId ;
/**
*
*/
private Integer carMessageCartype ;
/**
*
*/
private Integer carMessageType ;
/**
*
*/
private String messageTypeName ;
/**
*
*/
private Integer carMessageStartIndex ;
/**
*
*/
private Integer carMessageEndIndex ;
/**
* ( )
*/
private String messageTypeClass ;
/**
* (0 1)
*/
private Integer carMessageState ;
}

View File

@ -0,0 +1,19 @@
package com.muyu.feign;
import com.alibaba.fastjson2.JSONObject;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(name = "cloud-modules-carData")
public interface KafkaClient {
/**
* "/produceTest"GET
*
* @return String
* @return
*/
@GetMapping("/produce/producer")
public abstract String producerKafka(JSONObject data);
}

View File

@ -0,0 +1,24 @@
package com.muyu.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.muyu.domain.CarInformation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
*
*/
@Mapper
public interface CarInformationMapper extends MPJBaseMapper<CarInformation> {
/**
* VIN()
* @param carInformationVIN
* @return
*/
@Select("SELECT `car_information`.car_Information_Type FROM `car_information` WHERE `car_information`.car_information_VIN = #{carInformationVIN}")
Long selectcarMessageCartype(@Param("carInformationVIN") String carInformationVIN);
}

View File

@ -0,0 +1,17 @@
package com.muyu.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.muyu.domain.CarMessage;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
*
*/
@Mapper
public interface CarMessageMapper extends MPJBaseMapper<CarMessage> {
}

View File

@ -0,0 +1,12 @@
package com.muyu.mapper;
import com.muyu.domain.CarMessage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface CarMessagePlusMapper {
List<CarMessage> selectCarMessageList(@Param("carMessageCartype") Integer carMessageCartype);
}

View File

@ -0,0 +1,8 @@
package com.muyu.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.muyu.domain.CarMessageType;
public interface CarMessageTypeMapper extends MPJBaseMapper<CarMessageType> {
}

View File

@ -1,15 +1,14 @@
package com.muyu.server.mqtt; package com.muyu.mqtt;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.muyu.common.kafka.constants.KafkaConstants; import com.muyu.common.kafka.constants.KafkaConstants;
import com.muyu.domain.CarMessage; import com.muyu.domain.CarMessage;
import com.muyu.server.service.CarMessageService; import com.muyu.service.CarMessageService;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.clients.producer.ProducerRecord;
import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.*;
import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
@ -17,7 +16,7 @@ import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@Component //@Component
public class Demo { public class Demo {
@Resource @Resource
private CarMessageService service; private CarMessageService service;
@ -25,11 +24,10 @@ public class Demo {
private KafkaProducer<String, String> kafkaProducer; private KafkaProducer<String, String> kafkaProducer;
@PostConstruct @PostConstruct
public void test() { public void test() {
String topic = "vehicle"; String topic = "vehicle";
String content = "Message from MqttPublishSample"; String content = "Message from MqttPublishSample";
int qos = 2; int qos = 2;
String broker = "tcp://106.15.136.7:1883"; String broker = "tcp://60.204.221.52:1883";
String clientId = "JavaSample"; String clientId = "JavaSample";
try { try {
@ -50,7 +48,7 @@ public class Demo {
@Override @Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
List<CarMessage> list= service.selectCarMessageList(1,2); List<CarMessage> list= service.selectCarMessage(1);
String str = new String( mqttMessage.getPayload() ); String str = new String( mqttMessage.getPayload() );
System.out.println(str); System.out.println(str);
String[] test = str.split(" "); String[] test = str.split(" ");

View File

@ -0,0 +1,118 @@
package com.muyu.mqtt;
import com.alibaba.fastjson2.JSONObject;
import com.muyu.common.kafka.constants.KafkaConstants;
import com.muyu.domain.CarMessage;
import com.muyu.domain.KafKaData;
import com.muyu.service.CarMessageService;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.eclipse.paho.client.mqttv3.*;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* mqtt
*
* @ClassName MqttTest
* @Description
* @Date 2024/9/28 23:49
*/
@Slf4j
@Component
public class MqttTest {
private static final Integer ID = 1;
private static final Integer CODE = 1;
@Resource
private KafkaProducer<String, String> kafkaProducer;
@Resource
private CarMessageService sysCarMessageService;
@PostConstruct
public void Test() {
String topic = "vehicle";
String content = "Message from MqttPublishSample";
int qos = 2;
String broker = "tcp://60.204.221.52:1883";
String clientId = "JavaSample";
try {
// 第三个参数为空,默认持久化策略
MqttClient sampleClient = new MqttClient(broker, clientId);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
System.out.println("Connecting to broker: " + broker);
sampleClient.connect(connOpts);
sampleClient.subscribe(topic, 0);
sampleClient.setCallback(new MqttCallback() {
// 连接丢失
@Override
public void connectionLost(Throwable throwable) {
}
// 连接成功
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
List<CarMessage> list = sysCarMessageService.selectCarMessage(1);
String string = new String(mqttMessage.getPayload());
log.info(new String(mqttMessage.getPayload()));
List<KafKaData> kafKaDataList = new ArrayList<>();
String[] test = string.split(" ");
// String[] results = new String[list.size()];
for (CarMessage carMessage : list) {
int startIndex = Integer.parseInt(String.valueOf(carMessage.getCarMessageStartIndex())) - 1;
int endIndex = Integer.parseInt(String.valueOf(carMessage.getCarMessageEndIndex()));
StringBuilder hexBuilder = new StringBuilder();
for (int i = startIndex; i < endIndex; i++) {
hexBuilder.append(test[i]);
}
String hex = hexBuilder.toString();
char[] result = new char[hex.length() / 2];
for (int x = 0; x < hex.length(); x += 2) {
int high = Character.digit(hex.charAt(x), 16);
int low = Character.digit(hex.charAt(x + 1), 16);
result[x / 2] = (char) ((high << 4) + low);
}
String value = new String(result);
kafKaDataList.add(KafKaData.builder()
.key(carMessage.getMessageTypeCode())
.label(carMessage.getMessageTypeCode())
.value(value)
.type("String")
.build());
}
String jsonString = JSONObject.toJSONString(kafKaDataList);
ProducerRecord<String, String> producerRecord = new ProducerRecord<>(KafkaConstants.KafkaTopic, jsonString);
kafkaProducer.send(producerRecord);
log.info("kafka投产{}", jsonString);
// HashMap<String, String> stringStringHashMap = new HashMap<>();
// kafKaDataList.forEach(data -> stringStringHashMap.put(data.getKey(), data.getValue()));
// jsonString = JSONObject.toJSONString(stringStringHashMap);
// System.out.println(jsonString);
}
// 接收信息
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}
});
} catch (MqttException me) {
System.out.println("reason " + me.getReasonCode());
System.out.println("msg " + me.getMessage());
System.out.println("loc " + me.getLocalizedMessage());
System.out.println("cause " + me.getCause());
System.out.println("excep " + me);
me.printStackTrace();
}
}
}

View File

@ -0,0 +1,166 @@
package com.muyu.mqtt;//package com.muyu.server.mqtt;
//
//import com.muyu.analysis.parsing.remote.RemoteClientService;
//import com.muyu.common.core.constant.KafkaConstants;
//import com.muyu.common.core.constant.RedisConstants;
//import com.muyu.common.core.domain.Result;
//import com.muyu.enterprise.domain.resp.car.MessageValueListResp;
//import com.muyu.server.feign.KafkaClient;
//import jakarta.annotation.PostConstruct;
//import jakarta.annotation.Resource;
//import cn.hutool.json.JSONObject;
//import com.alibaba.fastjson.JSON;
//import lombok.extern.log4j.Log4j2;
//import org.apache.kafka.clients.producer.KafkaProducer;
//import org.apache.kafka.clients.producer.ProducerRecord;
//import org.eclipse.paho.client.mqttv3.*;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Component;
//
//import java.util.List;
//
///**
// * 协议解析处理数据发送传送到队列
// * @Author李庆帅
// * @Packagecom.muyu.analysis.parsing.MQTT
// * @Projectcloud-server
// * @nameParsingMQTT
// * @Date2024/9/29 16:08
// */
//@Log4j2
//@Component
//public class ParsingMQTT {
//
// @Resource
// private RedisTemplate<String, Object> redisTemplate;
//
// @Autowired
// private KafkaClient remoteServiceClient;
//
// @Resource
// private KafkaProducer<String, String> kafkaProducer;
//
// /**
// * 协议解析
// */
// @PostConstruct
// public void mqttClient() {
// String topic = "vehicle";
// String broker = "tcp://106.15.136.7:1883";
// String clientId = "JavaSample";
//
// try {
// // 第三个参数为空,默认持久化策略
// MqttClient sampleClient = new MqttClient(broker, clientId);
// MqttConnectOptions connOpts = new MqttConnectOptions();
// connOpts.setCleanSession(true);
// System.out.println("Connecting to broker: " + broker);
// sampleClient.connect(connOpts);
// sampleClient.subscribe(topic, 0);
// sampleClient.setCallback(new MqttCallback() {
// // 连接丢失
// @Override
// public void connectionLost(Throwable throwable) {
//
// }
//
// // 连接成功
// @Override
// public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
// System.out.println(new String(mqttMessage.getPayload()));
// JSONObject entries = this.protocolParsing(new String(mqttMessage.getPayload()));
//
// ProducerRecord<String, String> producerRecord = new ProducerRecord<>(KafkaConstants.MESSAGE_PARSING,
// entries.toString() );
// kafkaProducer.send(producerRecord);
// log.info("解析之后的数据"+entries);
//
// }
//
// /**
// * 协议解析
// * @param messageStr
// * @return
// */
// public JSONObject protocolParsing(String messageStr) {
// //根据空格切割数据
// String[] hexArray = messageStr.split(" ");
// StringBuilder result = new StringBuilder();
// //遍历十六进制数据转换为字符
// for (String hex : hexArray) {
// int decimal = Integer.parseInt(hex, 16);
// result.append((char) decimal);
// }
// //取出车辆VIN码
// String vehicleVin = result.substring(1, 18);
// log.info("车辆VIN码: " + vehicleVin);
// //根据车辆VIN码查询报文模板ID
// Result<Long> byVehicleVin = remoteServiceClient.findByVehicleVin(vehicleVin);
// Long templateId = byVehicleVin.getData();
// List<MessageValueListResp> templateList;
// //从redis缓存中获取报文模板数据
// try {
// String redisKey = RedisConstants.MESSAGE_TEMPLATE + templateId;
// if (redisTemplate.hasKey(redisKey)) {
// List<Object> list = redisTemplate.opsForList().range(redisKey, 0, -1);
// templateList = list.stream()
// .map(obj -> JSON.parseObject(obj.toString(), MessageValueListResp.class))
// .toList();
// log.info("Redis缓存查询成功");
// } else {
// Result<List<MessageValueListResp>> byTemplateId = remoteServiceClient.producerKafka(templateId);
// templateList = byTemplateId.getData();
// templateList.forEach(
// listResp ->
// redisTemplate.opsForList().rightPush(
// redisKey, JSON.toJSONString(listResp)
// )
// );
// log.info("数据库查询成功:"+byTemplateId);
// }
// } catch (Exception e) {
// log.info("获取报文模板失败");
// throw new RuntimeException("获取报文模板失败");
// }
// //判断报文模板列表不为空
// if (templateList.isEmpty()) {
// log.info("报文模版为空");
// throw new RuntimeException("报文模版为空");
// }
// //存储报文模版解析后的数据
// JSONObject jsonObject = new JSONObject();
// for (MessageValueListResp messageValue : templateList) {
// //起始位下标
// Integer startIndex = messageValue.getMessageStartIndex() - 1;
// //结束位下标
// Integer endIndex = messageValue.getMessageEndIndex();
// //根据报文模版截取数据
// String value = result.substring(startIndex, endIndex);
// //存入数据
// jsonObject.put(messageValue.getMessageLabel(), value);
// }
// return jsonObject;
// }
//
// // 接收信息
// @Override
// public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
//
// }
// });
// } catch (MqttException me) {
// log.info("reason " + me.getReasonCode());
// log.info("msg " + me.getMessage());
// log.info("loc " + me.getLocalizedMessage());
// log.info("cause " + me.getCause());
// log.info("excep " + me);
// me.printStackTrace();
// }
// }
//
//
//
//
//
//}

View File

@ -0,0 +1,35 @@
package com.muyu.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.domain.CarMessage;
import com.muyu.domain.resp.CarMessageResp;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
*
*/
public interface CarMessageService extends IService<CarMessage> {
//报文切割
/**
*
*
*
*/
JSONObject inciseCarMessage(String testString);
List<CarMessage> selectCarMessageList(int modelCode);
List<CarMessage> selectCarMessage(@Param("carMessageCartype") Integer carMessageCartype);
List<CarMessage> selectCarMessageListAll(int i);
}

View File

@ -0,0 +1,134 @@
package com.muyu.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.muyu.common.core.utils.StringUtils;
import com.muyu.domain.CarMessage;
import com.muyu.domain.resp.CarMessageResp;
import com.muyu.mapper.CarInformationMapper;
import com.muyu.mapper.CarMessageMapper;
import com.muyu.mapper.CarMessagePlusMapper;
import com.muyu.service.CarMessageService;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
*
*/
@Log4j2
@Service
public class CarMessageServiceImpl
extends ServiceImpl<CarMessageMapper, CarMessage>
implements CarMessageService {
@Resource
private CarMessageMapper carMessageMapper;
@Resource
private CarMessagePlusMapper carMessagePlusMapper;
@Resource
private CarInformationMapper carInformationMapper;
@Override
public List<CarMessage> selectCarMessageList(int modelCode) {
LambdaQueryWrapper<CarMessage> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CarMessage::getCarMessageCartype, modelCode);
return this.list(queryWrapper);
}
@Override
public List<CarMessage> selectCarMessage(Integer carMessageCartype) {
return carMessagePlusMapper.selectCarMessageList(carMessageCartype);
}
@Override
public List<CarMessage> selectCarMessageListAll(int i) {
LambdaQueryWrapper<CarMessage> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CarMessage::getCarMessageCartype, i);
return this.list(queryWrapper);
}
@Override
public JSONObject inciseCarMessage(String testString) {
return null;
}
//报文处理
// @Resource
// private RedisTemplate<String ,Objects > redisTemplate;
//
// /**
// * 报文解析
// * @param testString
// * @return
// */
// @Override
// public JSONObject inciseCarMessage(String testString) {
// //根据空格拆分切割数据字符串
// String[] split = testString.split(" ");
// StringBuilder stringBuilder = new StringBuilder();
// for (String conversion : split) {
// //将16进制字符串转换为对应的10进制
// int inciseindex = Integer.parseInt(conversion, 16);
// // 将10进制转换为对应的字符
// stringBuilder.append((char) inciseindex);
// }
// //切取车辆VIN
// String substring = stringBuilder.substring(1, 18);
// log.info("车辆的VIN码:" + substring);
// //根据给定的vehicleVin车辆VIN号获取对应的模板车辆分类carMessageCartype
// String selectcared = carInformationMapper.selectcarMessageCartype(substring);
// //创建接受数据的数组
// List<CarMessage> messagesList ;
//
// try{
// String redisKey = "carMessageList" + selectcared;
//
// if (redisTemplate.hasKey(redisKey)){
// List<Objects> list = redisTemplate.opsForList().range(redisKey , 0, -1);
// messagesList = list.stream()
// .map(objects -> JSON.parseObject(objects.toString(), CarMessage.class))
// .toList();
// log.info("Redis缓存查询成功");
// }else {
// messagesList = carInformationMapper.selectcarMessageCartype(selectcared);
//
// messagesList.forEach(
// listReq -> redisTemplate.opsForList().rightPushAll(redisKey, JSON.toString(listReq) )
// );
// log.info("数据库查询成功");
// }
// }catch(Exception e){
// throw new RuntimeException("获取报文模板失败");
// }
// //判断报文模板 列表 不为空
// if(messagesList.isEmpty()){
// throw new RuntimeException("报文模版为空");
// }
// //存储报文模板解析后的数据
// JSONObject jsonObject = new JSONObject();
// for (CarMessage carMessage : messagesList) {
// //起始位下标
// Integer startIndex = carMessage.getCarMessageStartIndex();
// //结束位下标
// Integer endIndex = carMessage.getCarMessageEndIndex();
// //根据报文模板获取保温截取位置
// String value = stringBuilder.substring(startIndex, endIndex);
// //存入数据
// jsonObject.put(carMessage.getMessageTypeName(), value);
//
// }
// return jsonObject;
//
// }
}

View File

@ -0,0 +1,2 @@
Spring Boot Version: ${spring-boot.version}
Spring Application Name: ${spring.application.name}

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/cloud-electronic"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.muyu" level="info"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<root level="info">
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
</configuration>

View File

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/cloud-electronic"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.sky.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 使用gRpc将日志发送到skywalking服务端 -->
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${log.sky.pattern}</Pattern>
</layout>
</encoder>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.muyu" level="info"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<root level="info">
<appender-ref ref="GRPC_LOG"/>
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
</configuration>

View File

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/cloud-electronic"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.sky.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 使用gRpc将日志发送到skywalking服务端 -->
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${log.sky.pattern}</Pattern>
</layout>
</encoder>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.muyu" level="info"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<root level="info">
<appender-ref ref="GRPC_LOG"/>
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
</configuration>

View File

@ -0,0 +1,15 @@
<?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">
<!-- 1.在mybats的开发中namespace有特殊的意思一定要是对应接口的全限定名通过namespace可以简历mapper.xml和接口之间的关系(名字不重要,位置不重要)-->
<mapper namespace="com.muyu.mapper.CarMessagePlusMapper">
<select id="selectCarMessageList" resultType="com.muyu.domain.CarMessage">
select * from `car_message` where car_message_cartype = #{carMessageCartype}
</select>
</mapper>

View File

@ -7,7 +7,7 @@ nacos:
addr: 127.0.0.1:8848 addr: 127.0.0.1:8848
user-name: nacos user-name: nacos
password: nacos password: nacos
namespace: eight namespace: xxy
# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all # SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
# Spring # Spring
spring: spring:

View File

@ -14,6 +14,7 @@
<module>cloud-modules-gen</module> <module>cloud-modules-gen</module>
<module>cloud-modules-file</module> <module>cloud-modules-file</module>
<module>cloud-modules-carData</module> <module>cloud-modules-carData</module>
<module>cloud-modules-protocolparsing</module>
</modules> </modules>
<artifactId>cloud-modules</artifactId> <artifactId>cloud-modules</artifactId>

View File

@ -7,7 +7,7 @@ nacos:
addr: 127.0.0.1:8848 addr: 127.0.0.1:8848
user-name: nacos user-name: nacos
password: nacos password: nacos
namespace: eight namespace: xxy
# Spring # Spring
spring: spring: