技术选型:
- Maven 3.8.4+
- SpringBoot 2.7.8
- SpringCloud 2021.0.4
- SpringCloudAlibaba 2022.0.1.0
- Nacos 2.1.1
- Sentinel 1.8.5
模块设计:
- 父工程:SpringCloudAlibaba
- 订单微服:order-service
- 库存微服:stock-service
1.创建父工程模块,以及依赖管理
依赖版本选择:
<properties>
<spring.cloud-version>2021.0.4</spring.cloud-version>
<spring.boot-version>2.7.8</spring.boot-version>
<spring.cloud.alibaba-version>2021.0.1.0</spring.cloud.alibaba-version>
</properties>
管理工程的依赖:
<!-- 管理子工程的依赖-->
<dependencyManagement>
<dependencies>
<!-- SpringBoot的依赖管理-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloud的依赖管理 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 管理SpringCloudAlibaba的依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.创建子工程order和stoc
2.1 包目录:
2.2 将子工程添加到父工程(pm.xml(SpringCloudAlibaba))
2.3在两个子工程中添加依赖(pom.xml(order),pom.xml(stock))
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3. 编写order模块:
3.1 编写order配置文件(application.yml)
在这里插入代码片server:
port: 8081 #订单端口号
spring:
application:
name: order-service #配置服务名称
3.2编写controller控制器类
@RestController
@RequestMapping("/order")
public class OrderController {
@GetMapping("/add")
public String add(){
System.out.println("订单创建成功");
return "订单创建成功";
}
}
3.3 进行测试
4. 编写stock模块:
4.1 编写stock配置文件(application.yml)
server:
port: 8091 #库存端口号
spring:
application:
name: order-service #配置服务名称
4.2编写controller控制器类
@RestController
@RequestMapping("/stock")
public class StockController {
@GetMapping("/reduce")
public String reduce(){
System.out.println("已减库存");
return "已减库存";
}
}
4.3 进行测试
5.实现远程调用
例:当我们创建订单时,需要向库存中也添加一条数据。此时就需要执行远程调用。
在微服之间实现远程调用需要使用到 RestTempate 对象。所以我们需要在订单微服中创建这个对象。因为我们的订单微服是属于消费端,则库存微服是属于提供端。
5.1 创建配置类并配置Bean对象
@Configuration
public class OrderConfig {
// 通过new创建
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
// 通过构建者对象创建
// @Bean
// @LoadBalanced
// public RestTemplate restTemplate(RestTemplateBuilder builder){
// RestTemplate restTemplate=builder.build();
// return restTemplate;
// }
}
5.2 修改 OrderController 控制器类,在这个类中注入 RestTemplate 对象,然后面 save 方法来远程调用 stock-service微服
通过save远程调用了stock-service微服的reduce方法
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/add")
public String add(){
System.out.println("订单创建成功");
// 远程调用
String url="http://localhost:8091/stock/reduce";
/*
* 1.通过getForObject方法实现远程调用
* 2.这里用的是getForObject,是应为stock远程调用的是Get请求,如果是POst请求,则使用postForObject()方法
* */
String result = restTemplate.getForObject(url,String.class); //第一个参数是请求地址,第二个参数是返回数据封装类型
return "订单创建成功:"+result;
}
}
5.3 进行测试