From 014eedc4e15051306c0251b901e1ae787e647293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9C=E7=81=AC=E7=9E=AC?= <2431038086@qq.com> Date: Sat, 24 Jun 2023 17:40:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=BB=E4=BF=A1=E9=98=9F=E5=88=97=20?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=B6=88=E6=81=AF=E5=BB=B6=E8=BF=9F=E6=B6=88?= =?UTF-8?q?=E8=B4=B9=20=E8=AE=A2=E5=8D=95=E5=BB=B6=E8=BF=9F=E5=8F=96?= =?UTF-8?q?=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- a-rabbitMQ/order/pom.xml | 7 +++ .../com/shun/order/config/RabbitMQConfig.java | 52 +++++++++++++++++++ .../order/controller/OrderController.java | 29 +++++++++++ .../shun/order/listener/OrderListener.java | 42 +++++++++++++++ .../order/src/main/resources/application.yml | 8 ++- 5 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 a-rabbitMQ/order/src/main/java/com/shun/order/config/RabbitMQConfig.java create mode 100644 a-rabbitMQ/order/src/main/java/com/shun/order/listener/OrderListener.java diff --git a/a-rabbitMQ/order/pom.xml b/a-rabbitMQ/order/pom.xml index c540ded..b217e96 100644 --- a/a-rabbitMQ/order/pom.xml +++ b/a-rabbitMQ/order/pom.xml @@ -18,4 +18,11 @@ UTF-8 + + + org.springframework.boot + spring-boot-starter-amqp + + + \ No newline at end of file diff --git a/a-rabbitMQ/order/src/main/java/com/shun/order/config/RabbitMQConfig.java b/a-rabbitMQ/order/src/main/java/com/shun/order/config/RabbitMQConfig.java new file mode 100644 index 0000000..f9bfa07 --- /dev/null +++ b/a-rabbitMQ/order/src/main/java/com/shun/order/config/RabbitMQConfig.java @@ -0,0 +1,52 @@ +package com.shun.order.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author 夜灬瞬 + * @since 2023/6/24 17:31 + */ +@Configuration +@Slf4j +public class RabbitMQConfig { + + public static final String ORDER_EXCHANGE = "order_exchange"; + public static final String ORDER_QUEUE = "order_queue"; + + public static final String DEAD_EXCHANGE = "dead_exchange"; + public static final String DEAD_QUEUE = "dead_queue"; + + @Bean + public Exchange orderExchange(){ + return ExchangeBuilder.fanoutExchange(ORDER_EXCHANGE).build(); + } + + @Bean + public Queue orderQueue(){ + return QueueBuilder.durable(ORDER_QUEUE).deadLetterExchange(DEAD_EXCHANGE).build(); + } + + @Bean + public Exchange deadExchange(){ + return ExchangeBuilder.fanoutExchange(DEAD_EXCHANGE).build(); + } + + @Bean + public Queue deadQueue(){ + return QueueBuilder.durable(DEAD_QUEUE).build(); + } + + @Bean + public Binding orderBinding(Exchange orderExchange,Queue orderQueue){ + return BindingBuilder.bind(orderQueue).to(orderExchange).with("").noargs(); + } + + @Bean + public Binding deadBinding(Exchange deadExchange,Queue deadQueue){ + return BindingBuilder.bind(deadQueue).to(deadExchange).with("").noargs(); + } + +} diff --git a/a-rabbitMQ/order/src/main/java/com/shun/order/controller/OrderController.java b/a-rabbitMQ/order/src/main/java/com/shun/order/controller/OrderController.java index 87a89c9..7852164 100644 --- a/a-rabbitMQ/order/src/main/java/com/shun/order/controller/OrderController.java +++ b/a-rabbitMQ/order/src/main/java/com/shun/order/controller/OrderController.java @@ -1,8 +1,16 @@ package com.shun.order.controller; +import com.shun.order.config.RabbitMQConfig; +import jakarta.annotation.Resource; +import org.springframework.amqp.AmqpException; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.core.MessagePostProcessor; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.UUID; + /** * @author 夜灬瞬 * @since 2023/6/19 15:54 @@ -10,6 +18,9 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class OrderController { + @Resource + RabbitTemplate rabbitTemplate; + /** * 创建订单 * @throws InterruptedException 异常 @@ -18,6 +29,24 @@ public class OrderController { public void create() throws InterruptedException { Thread.sleep(400); System.out.println("创建订单成功!"); + save(); + } + + public void save() { + // 生成主键ID + String id = UUID.randomUUID().toString(); + // 创建订单 + //orderMapper.save(id); + // 订单构建成功~ + // 发送消息到RabbitMQ的死信队列 + rabbitTemplate.convertAndSend(RabbitMQConfig.ORDER_EXCHANGE, "", id, new MessagePostProcessor() { + @Override + public Message postProcessMessage(Message message) throws AmqpException { + // 设置消息的生存时间为15s,当然,也可以在构建队列时,指定队列的生存时间。 + message.getMessageProperties().setExpiration("15000"); + return message; + } + }); } } diff --git a/a-rabbitMQ/order/src/main/java/com/shun/order/listener/OrderListener.java b/a-rabbitMQ/order/src/main/java/com/shun/order/listener/OrderListener.java new file mode 100644 index 0000000..e6faf0c --- /dev/null +++ b/a-rabbitMQ/order/src/main/java/com/shun/order/listener/OrderListener.java @@ -0,0 +1,42 @@ +package com.shun.order.listener; + +import com.rabbitmq.client.Channel; +import com.shun.order.config.RabbitMQConfig; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +/** + * 优惠券消费者 + * + * @author 夜灬瞬 + * @since 2023/6/21 21:43 + */ +@Component +@Slf4j +public class OrderListener { + + @RabbitListener(queues = {RabbitMQConfig.DEAD_QUEUE}) + public void consume(String msg, Channel channel, Message message) throws Exception { + //1、 调用Service实现订单状态的处理 + // orderService.delayCancelOrder(id); + + //2、 ack的干活~ + channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); + } + + + public void delayCancelOrder(String id) { + //1、基于id查询订单信息。 for update + // int orderState = orderMapper.findOrderStateByIdForUpdate(id); + // //2、判断订单状态 + // if(orderState != 0){ + // log.info("订单已经支付!!"); + // return; + // } + // //3、修改订单状态 + // log.info("订单未支付,修改订单状态为已取消"); + // orderMapper.updateOrderStateById(-1,id); + } +} diff --git a/a-rabbitMQ/order/src/main/resources/application.yml b/a-rabbitMQ/order/src/main/resources/application.yml index 7e35383..e2865db 100644 --- a/a-rabbitMQ/order/src/main/resources/application.yml +++ b/a-rabbitMQ/order/src/main/resources/application.yml @@ -6,4 +6,10 @@ spring: cloud: nacos: discovery: - server-addr: 127.0.0.1:8848 \ No newline at end of file + server-addr: 127.0.0.1:8848 + rabbitmq: + host: 192.168.48.128 + port: 5672 + username: admin + password: admin + virtual-host: / \ No newline at end of file