实现异步调用(下单服务发送消息)

master
Administrator 3 years ago
parent c40cb4ddcc
commit 1d9d73a254

@ -26,6 +26,10 @@
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId> <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -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();
}
}

@ -1,6 +1,8 @@
package com.mashibing.controller; package com.mashibing.controller;
import com.mashibing.client.*; 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.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -16,6 +18,8 @@ public class PlaceOrderController {
private ItemStockClient itemStockClient; private ItemStockClient itemStockClient;
@Autowired @Autowired
private OrderManageClient orderManageClient; private OrderManageClient orderManageClient;
/*
@Autowired @Autowired
private CouponClient couponClient; private CouponClient couponClient;
@Autowired @Autowired
@ -23,7 +27,10 @@ public class PlaceOrderController {
@Autowired @Autowired
private BusinessClient businessClient; private BusinessClient businessClient;
*/
@Autowired
private RabbitTemplate rabbitTemplate;
/** /**
* *
* @return * @return
@ -35,12 +42,19 @@ public class PlaceOrderController {
itemStockClient.decr(); itemStockClient.decr();
//2、调用订单服务创建订单 //2、调用订单服务创建订单
orderManageClient.create(); orderManageClient.create();
// 将之前的同步方式注释
/*
//3、调用优惠券服务预扣除使用的优惠券 //3、调用优惠券服务预扣除使用的优惠券
couponClient.coupon(); couponClient.coupon();
//4、调用用户积分服务预扣除用户使用的积分 //4、调用用户积分服务预扣除用户使用的积分
userPointsClient.up(); userPointsClient.up();
//5、调用商家服务通知商家用户已下单 //5、调用商家服务通知商家用户已下单
businessClient.notifyBusiness(); businessClient.notifyBusiness();
*/
String userAndOrderInfo = "用户信息&订单信息&优惠券信息等等…………";
// 将同步方式修改为基于RabbitMQ的异步方式
rabbitTemplate.convertAndSend(RabbitMQConfig.PLACE_ORDER_EXCHANGE,"",userAndOrderInfo);
long end = System.currentTimeMillis(); long end = System.currentTimeMillis();
System.out.println(end - start); System.out.println(end - start);

@ -7,4 +7,10 @@ spring:
cloud: cloud:
nacos: nacos:
discovery: discovery:
server-addr: 114.116.226.76:8848 server-addr: 114.116.226.76:8848
rabbitmq:
host: 114.116.226.76
port: 5672
username: rabbitmq
password: rabbitmq
virtual-host: rabbitmq
Loading…
Cancel
Save