diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 603082f..7a21e39 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,4 +14,49 @@
UTF-8
+
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+ 2.7.18
+
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.29
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+ 2.6.4
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.2.12
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.30
+ provided
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.12.5
+
+
+
+
+
+
diff --git a/src/main/java/com/bwie/Application.java b/src/main/java/com/bwie/Application.java
new file mode 100644
index 0000000..599cdc0
--- /dev/null
+++ b/src/main/java/com/bwie/Application.java
@@ -0,0 +1,15 @@
+package com.bwie;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @Author: wangxinyuan
+ * @Date: 2024/4/11 下午7:29
+ */
+@SpringBootApplication
+public class Application {
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class);
+ }
+}
diff --git a/src/main/java/com/bwie/admin/Pur.java b/src/main/java/com/bwie/admin/Pur.java
new file mode 100644
index 0000000..97ffd76
--- /dev/null
+++ b/src/main/java/com/bwie/admin/Pur.java
@@ -0,0 +1,36 @@
+package com.bwie.admin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @Author: wangxinyuan
+ * @Date: 2024/4/11 下午7:33
+ */
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Pur {
+
+
+ private String id;
+
+ private String XM;
+
+ private String Age;
+
+ private Date Time;
+
+ private String plate;
+
+ private String Card;
+
+ private String Photo1;
+
+ private String Photo2;
+
+}
diff --git a/src/main/java/com/bwie/config/ConfirmCallbackConfig.java b/src/main/java/com/bwie/config/ConfirmCallbackConfig.java
new file mode 100644
index 0000000..f5c7885
--- /dev/null
+++ b/src/main/java/com/bwie/config/ConfirmCallbackConfig.java
@@ -0,0 +1,48 @@
+package com.bwie.config;
+
+import org.springframework.amqp.rabbit.connection.CorrelationData;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * 消息发送确认配置 消息发送到交换机的确认
+ */
+@Component
+public class ConfirmCallbackConfig implements RabbitTemplate.ConfirmCallback {
+
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
+
+ /**
+ * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执
+ * @PostConstruct bean 被初始化的时候执行的方法的注解
+ * @PreDestory bean 被销毁的时候执行的方法的注解
+ */
+ @PostConstruct
+ public void init() {
+ rabbitTemplate.setConfirmCallback(this);
+ }
+
+ /**
+ * 交换机不管是否收到消息的一个回调方法
+ *
+ * @param correlationData 消息相关数据
+ * @param ack 交换机是否收到消息
+ * @param cause 失败原因
+ */
+ @Override
+ public void confirm(CorrelationData correlationData, boolean ack, String cause) {
+ if (ack) {
+ // 消息投递到 broker 的状态,true表示成功
+ System.out.println("消息发送成功!");
+ } else {
+ // 发送异常
+ System.out.println("发送异常原因 = " + cause);
+ // TODO 可以将消息 内容 以及 失败的原因 记录到 日志表中
+ }
+ }
+
+}
diff --git a/src/main/java/com/bwie/config/RabbitAdminConfig.java b/src/main/java/com/bwie/config/RabbitAdminConfig.java
new file mode 100644
index 0000000..9b114fd
--- /dev/null
+++ b/src/main/java/com/bwie/config/RabbitAdminConfig.java
@@ -0,0 +1,53 @@
+package com.bwie.config;
+
+import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * RabbitAdmin是RabbitMQ的一个Java客户端库,它提供了管理RabbitMQ资源的功能。它是通过与RabbitMQ服务器进行交互来执行管理操作的。
+ */
+@Configuration
+public class RabbitAdminConfig {
+
+ @Value("${spring.rabbitmq.host}")
+ private String host;
+ @Value("${spring.rabbitmq.username}")
+ private String username;
+ @Value("${spring.rabbitmq.password}")
+ private String password;
+ @Value("${spring.rabbitmq.virtualhost}")
+ private String virtualhost;
+
+ /**
+ * 构建 RabbitMQ的连接工厂
+ * @return
+ */
+ @Bean
+ public ConnectionFactory connectionFactory() {
+ CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
+ connectionFactory.setAddresses(host);
+ connectionFactory.setUsername(username);
+ connectionFactory.setPassword(password);
+ connectionFactory.setVirtualHost(virtualhost);
+ // 配置发送确认回调时,次配置必须配置,否则即使在RabbitTemplate配置了ConfirmCallback也不会生效
+ connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED);
+ connectionFactory.setPublisherReturns(true);
+ return connectionFactory;
+ }
+
+ /**
+ * 自己初始化 RabbitAdmin
+ * @param connectionFactory
+ * @return
+ */
+ @Bean
+ public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
+ RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
+ rabbitAdmin.setAutoStartup(true);
+ return rabbitAdmin;
+ }
+}
diff --git a/src/main/java/com/bwie/config/RabbitmqConfig.java b/src/main/java/com/bwie/config/RabbitmqConfig.java
new file mode 100644
index 0000000..6b98815
--- /dev/null
+++ b/src/main/java/com/bwie/config/RabbitmqConfig.java
@@ -0,0 +1,15 @@
+package com.bwie.config;
+
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class RabbitmqConfig {
+ // 消息转换配置
+ @Bean
+ public MessageConverter jsonMessageConverter() {
+ return new Jackson2JsonMessageConverter();
+ }
+}
diff --git a/src/main/java/com/bwie/config/ReturnCallbackConfig.java b/src/main/java/com/bwie/config/ReturnCallbackConfig.java
new file mode 100644
index 0000000..55de563
--- /dev/null
+++ b/src/main/java/com/bwie/config/ReturnCallbackConfig.java
@@ -0,0 +1,34 @@
+package com.bwie.config;
+
+import org.springframework.amqp.core.ReturnedMessage;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * 消息发送到队列的确认 一旦消息发送到队列失败 则会执行 returnedMessage 方法
+ */
+@Component
+public class ReturnCallbackConfig implements RabbitTemplate.ReturnsCallback {
+
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
+
+ @PostConstruct // @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执
+ public void init() {
+ rabbitTemplate.setReturnsCallback(this);
+ }
+
+ /**
+ * 消息发送到 队列失败 执行的 方法
+ * @param returnedMessage the returned message and metadata.
+ */
+ @Override
+ public void returnedMessage(ReturnedMessage returnedMessage) {
+ System.out.println("消息" + returnedMessage.getMessage().toString() + "被交换机" + returnedMessage.getExchange() + "回退!"
+ + "退回原因为:" + returnedMessage.getReplyText());
+ // 回退了所有的信息,可做补偿机制 记录到 数据库
+ }
+}
diff --git a/src/main/java/com/bwie/consumer/DataConsumer.java b/src/main/java/com/bwie/consumer/DataConsumer.java
new file mode 100644
index 0000000..bb922e7
--- /dev/null
+++ b/src/main/java/com/bwie/consumer/DataConsumer.java
@@ -0,0 +1,22 @@
+package com.bwie.consumer;
+
+import lombok.extern.log4j.Log4j2;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author: wangxinyuan
+ * @Date: 2024/4/11 下午7:40
+ */
+@Component
+@Log4j2
+public class DataConsumer {
+
+ @RabbitListener(queues = "data1")
+ public void consumeData1(String message) {
+ log.info("Received data1: " + message);
+ }
+
+
+
+}
diff --git a/src/main/java/com/bwie/consumer/consumeData2.java b/src/main/java/com/bwie/consumer/consumeData2.java
new file mode 100644
index 0000000..f0bf09d
--- /dev/null
+++ b/src/main/java/com/bwie/consumer/consumeData2.java
@@ -0,0 +1,19 @@
+package com.bwie.consumer;
+
+import lombok.extern.log4j.Log4j2;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author: wangxinyuan
+ * @Date: 2024/4/11 下午7:40
+ */
+@Component
+@Log4j2
+public class consumeData2 {
+
+ @RabbitListener(queues = "data2")
+ public void consumeData2(String message) {
+
+ }
+}
diff --git a/src/main/java/com/bwie/consumer/consumeData3.java b/src/main/java/com/bwie/consumer/consumeData3.java
new file mode 100644
index 0000000..50f0a77
--- /dev/null
+++ b/src/main/java/com/bwie/consumer/consumeData3.java
@@ -0,0 +1,20 @@
+package com.bwie.consumer;
+
+import lombok.extern.log4j.Log4j2;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author: wangxinyuan
+ * @Date: 2024/4/11 下午7:40
+ */
+@Component
+@Log4j2
+public class consumeData3 {
+
+
+ @RabbitListener(queues = "data3")
+ public void consumeData3(String message) {
+
+ }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
new file mode 100644
index 0000000..bc7bfe0
--- /dev/null
+++ b/src/main/resources/application.yml
@@ -0,0 +1,12 @@
+spring:
+ datasource:
+ url: jdbc:mysql://111.231.174.71:3306/day8?useSSL=false&serverTimezone=UTC
+ username: root
+ password: wxy@123
+ driver-class-name: com.mysql.cj.jdbc.Driver
+
+ rabbitmq:
+ host: 111.231.174.71
+ port: 5672
+ username: guest
+ password: guest