一、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工程】
    <parent>
    <groupId>com.yixuexi</groupId>
    <artifactId>pro01_spring_cloud_parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>pro02_spring_cloud_common</artifactId>
    

    3. 创建提供者工程 provider

    [创建普通工程继承父工程,添加spring boot ]
    pro03_spring_cloud_provider
    <dependency>
      <groupId>com.yixuexi</groupId>
      <artifactId>pro02_spring_cloud_common</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    1) 修改配置文件

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

    4. 创建消费者工程

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

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>com.yixuexi</groupId>
      <artifactId>pro02_spring_cloud_common</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    

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

    ```java /**
    • @date: 2021/2/25 23:39
    • @author: 易学习 */ @Configuration public class CloudConfig { @Bean public RestTemplate restTemplate(){
      return new RestTemplate();
      
      } }
<a name="pkeLV"></a>
### 3) 创建controller类
使用restTemplate 组件调用provider工程的controller
```java
/**
 * @date: 2021/2/25   23:40
 * @author: 易学习
 */
@RestController
public class MyController {
    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/consumer/get/emp")
    public Employee employee(){
        // 1.远程调用方法的主机
        String host = "http://localhost:1000";
        // 2.远程调用方法的具体URL地址
        String url = "/provider/get/employee";
        Employee forObject = restTemplate.getForObject(host + url, Employee.class);

        return forObject;
    }
}

4) application.yaml

server:
  port: 2000