From 789e445e70616424cf6ee6d6da195183bb8bd7d9 Mon Sep 17 00:00:00 2001 From: DongZeLiang <2746733890@qq.com> Date: Fri, 14 Jun 2024 22:48:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 32 ++++++++ pom.xml | 35 +++++++++ vehicle-event-client/pom.xml | 27 +++++++ .../client/VehicleEventClientApplication.java | 17 ++++ .../event/client/config/KafkaConfig.java | 39 ++++++++++ .../event/client/config/MsgComponent.java | 77 +++++++++++++++++++ .../src/main/resources/application.yml | 7 ++ vehicle-event-common/pom.xml | 48 ++++++++++++ .../vhilce/event/common/config/MsgConfig.java | 26 +++++++ .../common/constants/VehicleConstant.java | 16 ++++ .../vhilce/event/common/model/EventModel.java | 29 +++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + vehicle-event-server/pom.xml | 27 +++++++ .../server/VehicleEventServerApplication.java | 17 ++++ .../server/controller/TestMsgController.java | 35 +++++++++ .../src/main/resources/application.yml | 5 ++ 16 files changed, 438 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 vehicle-event-client/pom.xml create mode 100644 vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/VehicleEventClientApplication.java create mode 100644 vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/config/KafkaConfig.java create mode 100644 vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/config/MsgComponent.java create mode 100644 vehicle-event-client/src/main/resources/application.yml create mode 100644 vehicle-event-common/pom.xml create mode 100644 vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/config/MsgConfig.java create mode 100644 vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/constants/VehicleConstant.java create mode 100644 vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/model/EventModel.java create mode 100644 vehicle-event-common/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 vehicle-event-server/pom.xml create mode 100644 vehicle-event-server/src/main/java/com/muyu/vehicle/event/server/VehicleEventServerApplication.java create mode 100644 vehicle-event-server/src/main/java/com/muyu/vehicle/event/server/controller/TestMsgController.java create mode 100644 vehicle-event-server/src/main/resources/application.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6ad711 --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +/.idea + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..740f0a3 --- /dev/null +++ b/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.muyu + vehicle-event + 1.0.0 + pom + + vehicle-event-server + vehicle-event-client + vehicle-event-common + + + + + + org.springframework.boot + spring-boot-dependencies + 2.7.18 + import + pom + + + + + + 17 + 17 + UTF-8 + + + diff --git a/vehicle-event-client/pom.xml b/vehicle-event-client/pom.xml new file mode 100644 index 0000000..65f6511 --- /dev/null +++ b/vehicle-event-client/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + com.muyu + vehicle-event + 1.0.0 + + + vehicle-event-client + + + 17 + 17 + UTF-8 + + + + + com.muyu + vehicle-event-common + 1.0.0 + + + diff --git a/vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/VehicleEventClientApplication.java b/vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/VehicleEventClientApplication.java new file mode 100644 index 0000000..b590bca --- /dev/null +++ b/vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/VehicleEventClientApplication.java @@ -0,0 +1,17 @@ +package com.muyu.vehicle.event.client; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @Author: DongZeLiang + * @date: 2024/6/14 + * @Description: 事件系统启动类 + * @Version: 1.0 + */ +@SpringBootApplication +public class VehicleEventClientApplication { + public static void main (String[] args) { + SpringApplication.run(VehicleEventClientApplication.class, args); + } +} diff --git a/vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/config/KafkaConfig.java b/vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/config/KafkaConfig.java new file mode 100644 index 0000000..4fb6411 --- /dev/null +++ b/vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/config/KafkaConfig.java @@ -0,0 +1,39 @@ +package com.muyu.vehicle.event.client.config; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * @Author: DongZeLiang + * @date: 2024/6/14 + * @Description: kafka配置 + * @Version: 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Configuration +@ConfigurationProperties(prefix = "kafka") +public class KafkaConfig { + + + /** + * 主题 + */ + private String topic; + + /** + * 分区 + */ + private Integer partition; + + public String queueName(){ + return topic + "." + partition; + } + +} diff --git a/vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/config/MsgComponent.java b/vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/config/MsgComponent.java new file mode 100644 index 0000000..5ae9064 --- /dev/null +++ b/vehicle-event-client/src/main/java/com/muyu/vehicle/event/client/config/MsgComponent.java @@ -0,0 +1,77 @@ +package com.muyu.vehicle.event.client.config; + +import com.alibaba.fastjson2.JSONObject; +import com.muyu.vhilce.event.common.model.EventModel; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.*; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; +import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +import java.util.Arrays; + +/** + * @Author: DongZeLiang + * @date: 2024/6/14 + * @Description: 消息处理配置 + * @Version: 1.0 + */ +@Log4j2 +@Component +public class MsgComponent { + + /** + * 队列声明 + * @param kafkaConfig 名称依据 + * @return 队列对象 + */ + @Bean + public Queue initVehicleEventClientQueue(KafkaConfig kafkaConfig){ + return new Queue(kafkaConfig.queueName(), true, true, true); + } + + /** + * 绑定 + * @param vehicleEventExchange 交换机 + * @param initVehicleEventClientQueue 队列 + * @return 绑定结果 + */ + @Bean + public Binding binding1(FanoutExchange vehicleEventExchange, + Queue initVehicleEventClientQueue) { + return BindingBuilder.bind(initVehicleEventClientQueue).to(vehicleEventExchange); + } + + @Bean + public SimpleMessageListenerContainer messageListenerContainer( + ConnectionFactory connectionFactory, + KafkaConfig kafkaConfig + ) { + SimpleMessageListenerContainer simpleMessageListenerContainer = new SimpleMessageListenerContainer(connectionFactory); + //针对哪些队列(参数为可变参数) + simpleMessageListenerContainer.setQueueNames(kafkaConfig.queueName()); + //同时有多少个消费者线程在消费这个队列,相当于线程池的线程数字。 + simpleMessageListenerContainer.setConcurrentConsumers(3); + //最大的消费者线程数 + simpleMessageListenerContainer.setMaxConcurrentConsumers(5); + //设置消息确认方式 NONE=不确认,MANUAL=手动确认,AUTO=自动确认; + //自动确认 + simpleMessageListenerContainer.setAcknowledgeMode(AcknowledgeMode.AUTO); + //simpleMessageListenerContainer.setMessageListener(message -> log.info("springboot.rabbitmq-queue接收到的消息:[{}]", message)); + //手动确认(单条确认) + simpleMessageListenerContainer.setAcknowledgeMode(AcknowledgeMode.MANUAL); + simpleMessageListenerContainer.setMessageListener((ChannelAwareMessageListener) (message, channel) -> { + log.info("springboot.rabbitmq-queue接收到的消息:[{}]", + JSONObject.parseObject(new String(message.getBody()), EventModel.class) + ); + if (channel != null) { + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + } + }); + //消费端限流 + simpleMessageListenerContainer.setPrefetchCount(1); + return simpleMessageListenerContainer; + } +} diff --git a/vehicle-event-client/src/main/resources/application.yml b/vehicle-event-client/src/main/resources/application.yml new file mode 100644 index 0000000..6ba8468 --- /dev/null +++ b/vehicle-event-client/src/main/resources/application.yml @@ -0,0 +1,7 @@ +kafka: + topic: vehicle.gateway.001 + partition: 0 + +spring: + rabbitmq: + host: 175.24.138.82 diff --git a/vehicle-event-common/pom.xml b/vehicle-event-common/pom.xml new file mode 100644 index 0000000..273b1ac --- /dev/null +++ b/vehicle-event-common/pom.xml @@ -0,0 +1,48 @@ + + + 4.0.0 + + com.muyu + vehicle-event + 1.0.0 + + + vehicle-event-common + + + 17 + 17 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-amqp + + + + org.projectlombok + lombok + + + + com.alibaba + fastjson + 2.0.25 + + + + com.alibaba.fastjson2 + fastjson2 + 2.0.50 + + + diff --git a/vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/config/MsgConfig.java b/vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/config/MsgConfig.java new file mode 100644 index 0000000..8e15c22 --- /dev/null +++ b/vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/config/MsgConfig.java @@ -0,0 +1,26 @@ +package com.muyu.vhilce.event.common.config; + +import com.muyu.vhilce.event.common.constants.VehicleConstant; +import org.springframework.amqp.core.FanoutExchange; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +/** + * @Author: DongZeLiang + * @date: 2024/6/14 + * @Description: 消息配置 + * @Version: 1.0 + */ +public class MsgConfig { + + /** + * 创建交换机 + * @return 事件交互交换机 + */ + @Bean + public FanoutExchange vehicleEventExchange() { + return new FanoutExchange(VehicleConstant.VEHICLE_EVENT_EXCHANGE); + } + + +} diff --git a/vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/constants/VehicleConstant.java b/vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/constants/VehicleConstant.java new file mode 100644 index 0000000..284b08c --- /dev/null +++ b/vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/constants/VehicleConstant.java @@ -0,0 +1,16 @@ +package com.muyu.vhilce.event.common.constants; + +/** + * @Author: DongZeLiang + * @date: 2024/6/14 + * @Description: 事件系统常量 + * @Version: 1.0 + */ +public class VehicleConstant { + + /** + * 车辆事件系统交换机 + */ + public static final String VEHICLE_EVENT_EXCHANGE = "vehicle.event"; + +} diff --git a/vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/model/EventModel.java b/vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/model/EventModel.java new file mode 100644 index 0000000..b4c62d9 --- /dev/null +++ b/vehicle-event-common/src/main/java/com/muyu/vhilce/event/common/model/EventModel.java @@ -0,0 +1,29 @@ +package com.muyu.vhilce.event.common.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: DongZeLiang + * @date: 2024/6/14 + * @Description: 事件模型 + * @Version: 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EventModel { + + /** + * 车辆VIN + */ + private String vin; + + /** + * 消息类型 + */ + private String type; +} diff --git a/vehicle-event-common/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/vehicle-event-common/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..5d710cb --- /dev/null +++ b/vehicle-event-common/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.muyu.vhilce.event.common.config.MsgConfig diff --git a/vehicle-event-server/pom.xml b/vehicle-event-server/pom.xml new file mode 100644 index 0000000..52352e4 --- /dev/null +++ b/vehicle-event-server/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + com.muyu + vehicle-event + 1.0.0 + + + vehicle-event-server + + + 17 + 17 + UTF-8 + + + + + com.muyu + vehicle-event-common + 1.0.0 + + + diff --git a/vehicle-event-server/src/main/java/com/muyu/vehicle/event/server/VehicleEventServerApplication.java b/vehicle-event-server/src/main/java/com/muyu/vehicle/event/server/VehicleEventServerApplication.java new file mode 100644 index 0000000..de1e3bb --- /dev/null +++ b/vehicle-event-server/src/main/java/com/muyu/vehicle/event/server/VehicleEventServerApplication.java @@ -0,0 +1,17 @@ +package com.muyu.vehicle.event.server; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @Author: DongZeLiang + * @date: 2024/6/14 + * @Description: 事件处理服务端 + * @Version: 1.0 + */ +@SpringBootApplication +public class VehicleEventServerApplication { + public static void main (String[] args) { + SpringApplication.run(VehicleEventServerApplication.class, args); + } +} diff --git a/vehicle-event-server/src/main/java/com/muyu/vehicle/event/server/controller/TestMsgController.java b/vehicle-event-server/src/main/java/com/muyu/vehicle/event/server/controller/TestMsgController.java new file mode 100644 index 0000000..9f8c5c2 --- /dev/null +++ b/vehicle-event-server/src/main/java/com/muyu/vehicle/event/server/controller/TestMsgController.java @@ -0,0 +1,35 @@ +package com.muyu.vehicle.event.server.controller; + +import com.alibaba.fastjson2.JSONObject; +import com.muyu.vhilce.event.common.constants.VehicleConstant; +import com.muyu.vhilce.event.common.model.EventModel; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +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; + +/** + * @Author: DongZeLiang + * @date: 2024/6/14 + * @Description: 测试msg + * @Version: 1.0 + */ +@RestController +@RequestMapping("/test") +public class TestMsgController { + + @Autowired + private RabbitTemplate rabbitTemplate; + + @PostMapping + public String sendMsg(@RequestBody EventModel eventModel){ + rabbitTemplate.convertSendAndReceive(VehicleConstant.VEHICLE_EVENT_EXCHANGE, "", + JSONObject.toJSONString(eventModel) + + ); + return "成功"; + } + +} diff --git a/vehicle-event-server/src/main/resources/application.yml b/vehicle-event-server/src/main/resources/application.yml new file mode 100644 index 0000000..fc15596 --- /dev/null +++ b/vehicle-event-server/src/main/resources/application.yml @@ -0,0 +1,5 @@ +spring: + rabbitmq: + host: 175.24.138.82 +server: + port: 9023