一、SpringCloud基本知识

  • SpringCloud基于HTTP协议,和Dubbo最本质的区别(dubbo的核心是基于RPC)
  • 注册中心:Eureka
  • 客户端负载均衡:Ribbon
  • 声明式远程方法调用:Feign
  • 服务降级,熔断:Hystrix
  • 网关:Zuul

未命名图片.png

1. SpringBoot和SpringCloud关系

  • SpringBoot是基础
  • SpringCloud要基于SpringBoot开发

    2. SpringCloud和Dubbo对比

  • 核心:

    • Dubbo 底层基于RPC
    • SpringCloud底层基于RestFul,也可以说是基于Http。
  • 其他区别:
    • SpringCloud相对于Dubbo功能更加全面
    • SpringCloud是一个一站式的解决方案
    • SpringCloud能够天然的基于Spring全家桶开发

二、SpringCloud 目标基础测试环境

未命名图片.png

1. 创建父工程

  • pro01_spring_cloud_parent
  • 父工程很重要,里面定义了boot 和 cloud的版本信息
  • 配置依赖管理:
    1. <dependencyManagement>
    2. <dependencies>
    3. <!-- 导入 SpringCloud 需要使用的依赖信息 -->
    4. <dependency>
    5. <groupId>org.springframework.cloud</groupId>
    6. <artifactId>spring-cloud-dependencies</artifactId>
    7. <version>Greenwich.SR2</version>
    8. <type>pom</type>
    9. <!-- import 依赖范围表示将 spring-cloud-dependencies 包中的依赖信息导入 -->
    10. <scope>import</scope>
    11. </dependency>
    12. <!-- 导入 SpringBoot 需要使用的依赖信息 -->
    13. <dependency>
    14. <groupId>org.springframework.boot</groupId>
    15. <artifactId>spring-boot-dependencies</artifactId>
    16. <version>2.1.6.RELEASE</version>
    17. <type>pom</type>
    18. <scope>import</scope>
    19. </dependency>
    20. </dependencies>
    21. </dependencyManagement>

    2. 创建通用工程

    【此工程存放通用的组件,直接maven快速构建即可】
    pro02_spring_cloud_common 【添加 parent为01工程】
    1. <parent>
    2. <groupId>com.yixuexi</groupId>
    3. <artifactId>pro01_spring_cloud_parent</artifactId>
    4. <version>1.0-SNAPSHOT</version>
    5. </parent>
    6. <artifactId>pro02_spring_cloud_common</artifactId>

    3. 创建提供者工程 provider

    [创建普通工程继承父工程,添加spring boot ]
    pro03_spring_cloud_provider
    1. <dependency>
    2. <groupId>com.yixuexi</groupId>
    3. <artifactId>pro02_spring_cloud_common</artifactId>
    4. <version>1.0-SNAPSHOT</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>org.springframework.boot</groupId>
    8. <artifactId>spring-boot-starter-web</artifactId>
    9. </dependency>

    1) 修改配置文件

    application.yaml
    1. server:
    2. port: 1000
    2) 创建controller
    1. @RestController
    2. public class ProviderController {
    3. @RequestMapping("/provider/get/employee")
    4. public Employee getEmployee(){
    5. Employee e = new Employee();
    6. e.setEmpId(1);
    7. e.setEmpName("zhangsan");
    8. e.setSex("男");
    9. return e;
    10. }
    11. }

    4. 创建消费者工程

    1) [创建普通工程继承父工程,添加spring boot]

    1. <dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-web</artifactId>
    4. </dependency>
    5. <dependency>
    6. <groupId>com.yixuexi</groupId>
    7. <artifactId>pro02_spring_cloud_common</artifactId>
    8. <version>1.0-SNAPSHOT</version>
    9. </dependency>

    2) 创建配置类 提供RestTemplate 组件

    ```java /**
    • @date: 2021/2/25 23:39
    • @author: 易学习 */ @Configuration public class CloudConfig { @Bean public RestTemplate restTemplate(){
      1. return new RestTemplate();
      } }
  1. <a name="pkeLV"></a>
  2. ### 3) 创建controller类
  3. 使用restTemplate 组件调用provider工程的controller
  4. ```java
  5. /**
  6. * @date: 2021/2/25 23:40
  7. * @author: 易学习
  8. */
  9. @RestController
  10. public class MyController {
  11. @Autowired
  12. private RestTemplate restTemplate;
  13. @RequestMapping("/consumer/get/emp")
  14. public Employee employee(){
  15. // 1.远程调用方法的主机
  16. String host = "http://localhost:1000";
  17. // 2.远程调用方法的具体URL地址
  18. String url = "/provider/get/employee";
  19. Employee forObject = restTemplate.getForObject(host + url, Employee.class);
  20. return forObject;
  21. }
  22. }

4) application.yaml

  1. server:
  2. port: 2000