技术选型:
- 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创建@Beanpublic 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 {@Autowiredprivate 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 进行测试