From e60fd40ec33987db918a42145e9f1d6f465b6471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9C=E7=81=AC=E7=9E=AC?= <2431038086@qq.com> Date: Wed, 21 Jun 2023 21:47:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E6=B6=88=E8=B4=B9=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- a-rabbitMQ/coupon/pom.xml | 7 +++ .../shun/coupon/config/RabbitMQConfig.java | 56 +++++++++++++++++++ .../shun/coupon/listener/CouponListener.java | 29 ++++++++++ .../coupon/src/main/resources/application.yml | 12 +++- 4 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 a-rabbitMQ/coupon/src/main/java/com/shun/coupon/config/RabbitMQConfig.java create mode 100644 a-rabbitMQ/coupon/src/main/java/com/shun/coupon/listener/CouponListener.java diff --git a/a-rabbitMQ/coupon/pom.xml b/a-rabbitMQ/coupon/pom.xml index 6dd6a0a..c317666 100644 --- a/a-rabbitMQ/coupon/pom.xml +++ b/a-rabbitMQ/coupon/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/coupon/src/main/java/com/shun/coupon/config/RabbitMQConfig.java b/a-rabbitMQ/coupon/src/main/java/com/shun/coupon/config/RabbitMQConfig.java new file mode 100644 index 0000000..9d253d3 --- /dev/null +++ b/a-rabbitMQ/coupon/src/main/java/com/shun/coupon/config/RabbitMQConfig.java @@ -0,0 +1,56 @@ +package com.shun.coupon.config; + +import org.springframework.amqp.core.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author 夜灬瞬 + * @since 2023/6/21 21:08 + */ +@Configuration +public class RabbitMQConfig { + + /** + * 下单服务的交换机 + */ + public static final String PLACE_ORDER_EXCHANGE = "place_order_exchange"; + + /** + * 三个服务的Queue + */ + public static final String COUPON_QUEUE = "coupon_queue"; + public static final String USER_POINTS_QUEUE = "user_points_queue"; + public static final String BUSINESS_QUEUE = "business_queue"; + + @Bean + public Exchange placeOrderExchange(){ + return ExchangeBuilder.fanoutExchange(PLACE_ORDER_EXCHANGE).build(); + } + + @Bean + public Queue couponQueue(){ + return QueueBuilder.durable(COUPON_QUEUE).build(); + } + @Bean + public Queue userPointsQueue(){ + return QueueBuilder.durable(USER_POINTS_QUEUE).build(); + } + @Bean + public Queue businessQueue(){ + return QueueBuilder.durable(BUSINESS_QUEUE).build(); + } + + @Bean + public Binding couponBinding(Exchange placeOrderExchange,Queue couponQueue){ + return BindingBuilder.bind(couponQueue).to(placeOrderExchange).with("").noargs(); + } + @Bean + public Binding userPointsBinding(Exchange placeOrderExchange,Queue userPointsQueue){ + return BindingBuilder.bind(userPointsQueue).to(placeOrderExchange).with("").noargs(); + } + @Bean + public Binding businessBinding(Exchange placeOrderExchange,Queue businessQueue){ + return BindingBuilder.bind(businessQueue).to(placeOrderExchange).with("").noargs(); + } +} diff --git a/a-rabbitMQ/coupon/src/main/java/com/shun/coupon/listener/CouponListener.java b/a-rabbitMQ/coupon/src/main/java/com/shun/coupon/listener/CouponListener.java new file mode 100644 index 0000000..8cf156c --- /dev/null +++ b/a-rabbitMQ/coupon/src/main/java/com/shun/coupon/listener/CouponListener.java @@ -0,0 +1,29 @@ +package com.shun.coupon.listener; + +import com.rabbitmq.client.AMQP; +import com.rabbitmq.client.Channel; +import com.shun.coupon.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 CouponListener { + + @RabbitListener(queues = {RabbitMQConfig.COUPON_QUEUE}) + public void consume(String msg, Channel channel, Message message) throws Exception { + // 预扣除优惠券 + Thread.sleep(400); + log.info("优惠券预扣除成功! msg:{}",msg); + // 手动ACK + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + } +} diff --git a/a-rabbitMQ/coupon/src/main/resources/application.yml b/a-rabbitMQ/coupon/src/main/resources/application.yml index 66f12d9..47ad863 100644 --- a/a-rabbitMQ/coupon/src/main/resources/application.yml +++ b/a-rabbitMQ/coupon/src/main/resources/application.yml @@ -6,4 +6,14 @@ 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: / + listener: + simple: + # 手动 ack + acknowledge-mode: manual \ No newline at end of file