技术选型:
- 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 进行测试

 
 



















