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