• SpringCloud环境搭建及入门案例


    技术选型:

    • 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5

      管理工程的依赖:

    <!--    管理子工程的依赖-->
        <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3. 编写order模块:

     3.1 编写order配置文件(application.yml)

    在这里插入代码片server:
      port: 8081 #订单端口号
    spring:
      application:
        name: order-service  #配置服务名称
    
    • 1
    • 2
    • 3
    • 4
    • 5

     3.2编写controller控制器类

    @RestController
    @RequestMapping("/order")
    public class OrderController {
    
        @GetMapping("/add")
        public String add(){
            System.out.println("订单创建成功");
            return  "订单创建成功";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

     3.3 进行测试

    在这里插入图片描述
    在这里插入图片描述

    4. 编写stock模块:

     4.1 编写stock配置文件(application.yml)

    server:
      port: 8091 #库存端口号
    spring:
      application:
        name: order-service  #配置服务名称
    
    • 1
    • 2
    • 3
    • 4
    • 5

     4.2编写controller控制器类

    @RestController
    @RequestMapping("/stock")
    public class StockController {
    
        @GetMapping("/reduce")
        public String reduce(){
            System.out.println("已减库存");
            return "已减库存";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

     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;
    //    }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

     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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

     5.3 进行测试

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)
    R语言ggplot2可视化分面图(facet):gganimate包基于transition_time函数创建动态散点图动画(gif)
    matlab绘制动图
    目标检测网络之Fast-RCNN
    安装windows linux 双系统
    10 大数据科学Python库,你用过几个?
    物联网感知-高压直流长距离供电在线实时监测(光纤传感技术)
    Vue中如何进行滚动加载与无限滚动
    软考高级系统架构设计师系列之:可靠性设计
    【重要!!】CSDN博客停止更新, 迁移至自建博客
  • 原文地址:https://blog.csdn.net/youraiai/article/details/132709050