From 47f79ff4586fa376995c17890c87843e90db5ca4 Mon Sep 17 00:00:00 2001 From: callmeyan Date: Mon, 23 May 2022 17:09:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0RabbitMQ=E9=98=9F=E5=88=97?= =?UTF-8?q?=E7=9A=84=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- driver/pom.xml | 8 ++-- .../longicorn/driver/config/RabbitConfig.java | 47 +++++++++++++++++++ .../consumer/RabbitMessageConsumer.java | 20 ++++++++ .../controller/MessageQueueController.java | 20 ++++++++ .../driver/service/RabbitMQService.java | 43 +++++++++++++++++ driver/src/main/resources/application.yml | 6 ++- 6 files changed, 139 insertions(+), 5 deletions(-) create mode 100644 driver/src/main/java/xyz/longicorn/driver/config/RabbitConfig.java create mode 100644 driver/src/main/java/xyz/longicorn/driver/consumer/RabbitMessageConsumer.java create mode 100644 driver/src/main/java/xyz/longicorn/driver/controller/MessageQueueController.java create mode 100644 driver/src/main/java/xyz/longicorn/driver/service/RabbitMQService.java diff --git a/driver/pom.xml b/driver/pom.xml index 51057f2..2775104 100644 --- a/driver/pom.xml +++ b/driver/pom.xml @@ -21,10 +21,10 @@ org.springframework.boot spring-boot-starter-actuator - - - - + + org.springframework.boot + spring-boot-starter-amqp + net.coobird thumbnailator diff --git a/driver/src/main/java/xyz/longicorn/driver/config/RabbitConfig.java b/driver/src/main/java/xyz/longicorn/driver/config/RabbitConfig.java new file mode 100644 index 0000000..1a73daf --- /dev/null +++ b/driver/src/main/java/xyz/longicorn/driver/config/RabbitConfig.java @@ -0,0 +1,47 @@ +package xyz.longicorn.driver.config; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class RabbitConfig { + // 要订阅消息队列的主题 + public static final String RABBITMQ_DEFAULT_TOPIC = "default_message_topic"; + public static final String RABBITMQ_DEFAULT_DIRECT_EXCHANGE = "default_message_exchange"; + public static final String RABBITMQ_DEFAULT_DIRECT_ROUTING = "default_message_routing"; + // 队列 + @Bean + public Queue rabbitmqDemoDirectQueue() { + /** + * 1、name: 队列名称 + * 2、durable: 是否持久化 + * 3、exclusive: 是否独享、排外的。如果设置为true,定义为排他队列。则只有创建者可以使用此队列。也就是private私有的。 + * 4、autoDelete: 是否自动删除。也就是临时队列。当最后一个消费者断开连接后,会自动删除。 + * */ + return new Queue(RABBITMQ_DEFAULT_TOPIC, true, false, false); + } + + // 交换机 + @Bean + public DirectExchange rabbitmqDemoDirectExchange() { + //Direct交换机 + return new DirectExchange(RABBITMQ_DEFAULT_DIRECT_EXCHANGE, true, false); + } + + // 队列与交换机的绑定 + @Bean + public Binding bindDirect() { + //链式写法,绑定交换机和队列,并设置匹配键 + return BindingBuilder + //绑定队列 + .bind(rabbitmqDemoDirectQueue()) + //到交换机 + .to(rabbitmqDemoDirectExchange()) + //并设置匹配键 + .with(RABBITMQ_DEFAULT_DIRECT_ROUTING); + } +} diff --git a/driver/src/main/java/xyz/longicorn/driver/consumer/RabbitMessageConsumer.java b/driver/src/main/java/xyz/longicorn/driver/consumer/RabbitMessageConsumer.java new file mode 100644 index 0000000..b328bcb --- /dev/null +++ b/driver/src/main/java/xyz/longicorn/driver/consumer/RabbitMessageConsumer.java @@ -0,0 +1,20 @@ +package xyz.longicorn.driver.consumer; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; +import xyz.longicorn.driver.config.RabbitConfig; + +import java.util.Map; + +@Component +@RabbitListener(queues = RabbitConfig.RABBITMQ_DEFAULT_TOPIC) // 设置要监听队列的主题名称 +@Slf4j +public class RabbitMessageConsumer { + // 处理消息的方法 参数取决去发送消息的数据类型 + @RabbitHandler + public void processMessage(Map map) { + log.info("获取到一条消息:" + map.toString()); + } +} diff --git a/driver/src/main/java/xyz/longicorn/driver/controller/MessageQueueController.java b/driver/src/main/java/xyz/longicorn/driver/controller/MessageQueueController.java new file mode 100644 index 0000000..61057f4 --- /dev/null +++ b/driver/src/main/java/xyz/longicorn/driver/controller/MessageQueueController.java @@ -0,0 +1,20 @@ +package xyz.longicorn.driver.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import xyz.longicorn.driver.service.RabbitMQService; + +import javax.annotation.Resource; + +@RestController +public class MessageQueueController { + + @Resource + private RabbitMQService rabbitMQService; + + @RequestMapping("/send-msg") + public String sendMessage(String message) { + rabbitMQService.sendMessage(message); + return "send message success"; + } +} diff --git a/driver/src/main/java/xyz/longicorn/driver/service/RabbitMQService.java b/driver/src/main/java/xyz/longicorn/driver/service/RabbitMQService.java new file mode 100644 index 0000000..e090611 --- /dev/null +++ b/driver/src/main/java/xyz/longicorn/driver/service/RabbitMQService.java @@ -0,0 +1,43 @@ +package xyz.longicorn.driver.service; + +import cn.hutool.core.lang.UUID; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import xyz.longicorn.driver.config.RabbitConfig; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class RabbitMQService { + + @Resource + private RabbitTemplate rabbitTemplate; + + private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public boolean sendMessage(String message) { + try { + String msgId = UUID.fastUUID().toString(); + String sendTime = sdf.format(new Date()); + Map map = new HashMap<>(); + map.put("id", msgId); + map.put("sendTime", sendTime); + map.put("message", message); + + // 发送 + rabbitTemplate.convertAndSend( + RabbitConfig.RABBITMQ_DEFAULT_DIRECT_EXCHANGE, // 接收消息的交换机 + RabbitConfig.RABBITMQ_DEFAULT_DIRECT_ROUTING, // 发送消息的路由 + map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } +} diff --git a/driver/src/main/resources/application.yml b/driver/src/main/resources/application.yml index b5cce1a..5a901e4 100644 --- a/driver/src/main/resources/application.yml +++ b/driver/src/main/resources/application.yml @@ -61,7 +61,11 @@ spring: # redis缓存 redis: database: 1 - + rabbitmq: + host: 127.0.0.1 + port: 5672 + username: client + password: 123123 mvc: pathmatch: # 因为Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher。