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