From 1d9d73a2545411ce8608bca687d8b5d5eef9e56b Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 22 Mar 2023 21:51:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=BC=82=E6=AD=A5=E8=B0=83?= =?UTF-8?q?=E7=94=A8=EF=BC=88=E4=B8=8B=E5=8D=95=E6=9C=8D=E5=8A=A1=E5=8F=91?= =?UTF-8?q?=E9=80=81=E6=B6=88=E6=81=AF=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01-placeorder/pom.xml | 4 ++ .../com/mashibing/config/RabbitMQConfig.java | 52 +++++++++++++++++++ .../controller/PlaceOrderController.java | 14 +++++ .../src/main/resources/application.yml | 8 ++- 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 01-placeorder/src/main/java/com/mashibing/config/RabbitMQConfig.java diff --git a/01-placeorder/pom.xml b/01-placeorder/pom.xml index c9875fb..a8e301c 100644 --- a/01-placeorder/pom.xml +++ b/01-placeorder/pom.xml @@ -26,6 +26,10 @@ org.springframework.cloud spring-cloud-starter-openfeign + + org.springframework.boot + spring-boot-starter-amqp + \ No newline at end of file diff --git a/01-placeorder/src/main/java/com/mashibing/config/RabbitMQConfig.java b/01-placeorder/src/main/java/com/mashibing/config/RabbitMQConfig.java new file mode 100644 index 0000000..d71e9df --- /dev/null +++ b/01-placeorder/src/main/java/com/mashibing/config/RabbitMQConfig.java @@ -0,0 +1,52 @@ +package com.mashibing.config; + +import org.springframework.amqp.core.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author zjw + * @description + */ +@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/01-placeorder/src/main/java/com/mashibing/controller/PlaceOrderController.java b/01-placeorder/src/main/java/com/mashibing/controller/PlaceOrderController.java index 35b0465..dd3d786 100644 --- a/01-placeorder/src/main/java/com/mashibing/controller/PlaceOrderController.java +++ b/01-placeorder/src/main/java/com/mashibing/controller/PlaceOrderController.java @@ -1,6 +1,8 @@ package com.mashibing.controller; import com.mashibing.client.*; +import com.mashibing.config.RabbitMQConfig; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -16,6 +18,8 @@ public class PlaceOrderController { private ItemStockClient itemStockClient; @Autowired private OrderManageClient orderManageClient; + + /* @Autowired private CouponClient couponClient; @Autowired @@ -23,7 +27,10 @@ public class PlaceOrderController { @Autowired private BusinessClient businessClient; +*/ + @Autowired + private RabbitTemplate rabbitTemplate; /** * 模拟用户下单操作 * @return @@ -35,12 +42,19 @@ public class PlaceOrderController { itemStockClient.decr(); //2、调用订单服务,创建订单 orderManageClient.create(); + + // 将之前的同步方式注释 + /* //3、调用优惠券服务,预扣除使用的优惠券 couponClient.coupon(); //4、调用用户积分服务,预扣除用户使用的积分 userPointsClient.up(); //5、调用商家服务,通知商家用户已下单 businessClient.notifyBusiness(); +*/ + String userAndOrderInfo = "用户信息&订单信息&优惠券信息等等…………"; + // 将同步方式修改为基于RabbitMQ的异步方式 + rabbitTemplate.convertAndSend(RabbitMQConfig.PLACE_ORDER_EXCHANGE,"",userAndOrderInfo); long end = System.currentTimeMillis(); System.out.println(end - start); diff --git a/01-placeorder/src/main/resources/application.yml b/01-placeorder/src/main/resources/application.yml index 4b5ff9d..5ffa4c0 100644 --- a/01-placeorder/src/main/resources/application.yml +++ b/01-placeorder/src/main/resources/application.yml @@ -7,4 +7,10 @@ spring: cloud: nacos: discovery: - server-addr: 114.116.226.76:8848 \ No newline at end of file + server-addr: 114.116.226.76:8848 + rabbitmq: + host: 114.116.226.76 + port: 5672 + username: rabbitmq + password: rabbitmq + virtual-host: rabbitmq \ No newline at end of file