Spring Cloud学习记录 01Spring Cloud 概念

这篇博客介绍了Spring Cloud的基础概念,包括它作为微服务框架的角色,涉及的服务注册中心、负载均衡、熔断和配置管理等组件。博主强调了Spring Cloud版本与Spring Boot版本的对应关系,并分享了首次搭建微服务的步骤,包括创建父项目、配置子项目版本以及实现服务提供者和调用者的示例。文章最后提到了RestTemplate在客户端调用中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Cloud 认知

Spring Cloud 是一系列框架的集合,它整合了优秀框架到自己项目中。其中实现了:配置管理、服务发现、智能路由、负载均衡、熔断器、控制总线等功能。

主要涉及到的组件:

  • Eureka:服务注册中心,用于服务管理
  • Ribbon:基于客户端的负载均衡组件
  • Hystrix:容错框架,能够防止服务的雪崩效应
  • Feign:Web 服务客户端,能够简化 HTTP 接口的调用
  • Zuul:API 网关,提供路由转发、请求过滤等功能
  • Config:分布式配置管理
  • Sleuth:服务跟踪
  • Stream:构建消息驱动的微服务应用程序的框架
  • Bus:消息代理的集群消息总线

Spring Cloud版本

Spring Cloud 是个众多 子项目 综合起来的大项目,因此对 微服务构架 解决方案有 综合的组件,其中组件之间都是独立的,它们各自维持着自己版本号的 迭代与更新

Spring Cloud 和 Spring Boot版本 对应关系

Release TrainBoot Version
Hoxton2.2.x
Greenwich2.1.x
Finchley2.0.x
Edgware1.5.x
Dalston1.5.x

首次应用

微服务模拟场景

微服务是由多个子项目组合而成的父项目。以下首次应用模拟 服务 提供调用 应用(查数据测试

  1. 创建 父项目 无骨架Maven项目

  2. 配置父项目 pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.sans</groupId>
        <artifactId>springcloud-father</artifactId>
        <!--配置 聚合父工程-->
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
    
        <modules>
            <module>user-service</module>
            <module>consumer-demo</module>
        </modules>
    
        <!--配置 父项目-->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.5.RELEASE</version>
            <relativePath/>
        </parent>
    
        <!--Spring 与 Spring Cloud 版本号必须对应-->
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
            <mapper.starter.version>2.1.5</mapper.starter.version>
            <mysql.version>5.1.46</mysql.version>
        </properties>
    
        <!-- 统一管理依赖 -->
        <dependencyManagement>
            <dependencies>
                <!-- springCloud -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!-- 通用Mapper启动器 -->
                <dependency>
                    <groupId>tk.mybatis</groupId>
                    <artifactId>mapper-spring-boot-starter</artifactId>
                    <version>${mapper.starter.version}</version>
                </dependency>
                <!-- mysql驱动 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>${mysql.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    • <dependencyManagement> 可统一配置 子项目的版本号 (子项目无需在进行版本号的锁定
    • Spring Clound 和 Spring Boot 版本 必须严格对应指定版本
    • 配置该项目为聚合父工程 <packaging>pom</packaging>
  3. 在父项目下创建 提供者 无骨架Maven项目(用于 用户业务操作服务

  4. 提供者项目 pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
        <parent>
            <artifactId>springcloud-father</artifactId>
            <groupId>com.sans</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>user-service</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- 通用Mapper启动器 -->
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
            </dependency>
            <!-- mysql驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
        </dependencies>
    
    </project>
    

    组件依赖的版本号由父项目的pom进行配置

  5. 提供者项目 大致流程controller、mapper、pojo、service、启动类 组件

    • 配置需要改 端口号 , 提供者 和 调用者 端口以防冲突
    • controller提供的接口: http://localhost:80/user/2 (按ID查用户)
  6. 在父项目下创建 调用者 无骨架Maven项目 (通过提供者获取接口进行 用户业务操作服务

  7. 调用者项目 只需 添加web依赖 、模板方法、实体pojo、contoller

  8. 调用者项目 pom.xml

    <!--调用者只需一个web依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    
  9. 调用者项目 启动器类 添加模板工具方法

    @SpringBootApplication
    public class Application {
        
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
        
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
        
    }
    
  10. 调用者项目 contoller ( pojo的User实体类、端口无配置默认8080

    @RestController
    @RequestMapping("consumer")
    public class ConsumerController {
        
        @Autowired
        private RestTemplate restTemplate;
        
         @RequestMapping("{id}")
        public User findById(@PathVariable Long id) {
            String url = "HTTP://localhost:9091/user/"+id;
            return restTemplate.getForObject(url , User.class);
        }
        
    }
    

    Spring提供了一个 RestTemplate模板工具类,对基于HTTP的客户端进行了封装,并且实现了 对象 与 json的序列化 、反序列化,非常方便。RestTemplate并没有限定HTTP的客户端类型,而是进行了抽象,目前常用的3种都有支持:

    • HTTPClient
    • OkHTTP
    • JDK原生的URLConnection(默认的)
  11. 测试 分别启动两个子项目

    通过 调用者接口中应用 提供者的接口

    访问 http://localhost:8080/consumer/2 (按ID查用户)


仓库代码 : https://gitee.com/Sanscan12/spring-cloud-examples.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值