Skip to content

Spring Cloud

Spring Cloud作为一个大型的微服务框架,它整合了多种服务于微服务架构的组件和工具,通过提供一系列子项目来实现微服务间的治理、配置管理、服务发现、断路器、智能路由等功能。为了管理这些子项目的集成和发布,Spring Cloud采取了一种独特的版本命名方式和版本管理策略,以确保用户能够清晰地理解和使用不同版本的组件。

版本命名规则

Spring Cloud的版本命名放弃了传统的数字序列,而采用伦敦地铁站的名字作为版本代号,这些名称按照字母表的顺序排列,以此来表示版本的时间顺序。例如,最早的Release版本被称为Angel,随后的版本依次可能是BrixtonCamden等,每个站点名称代表一个主要版本。

版本组成部分

  • 主版本名称:使用伦敦地铁站名称,反映版本发布时间的先后顺序。

  • SR(Service Releases)后缀及其编号:在每个主版本发布之后,随着bug修复、小功能增强或安全更新的积累,会发布一系列的服务更新版本,称为"Service Releases"。这里的SR6SR5即是此类更新的标识,其中数字部分表示这是该主版本下的第几次服务更新。

版本策略的意义

采用这种命名方式和版本策略,Spring Cloud能够清晰地区分不同阶段的发布内容,同时避免了传统数字版本号可能带来的混淆。用户可以直观地了解到某个版本是相对较新的还是较旧的,并且通过SR的编号判断该版本包含了哪些后续的修正和优化。此外,这种方式也为跟踪和回溯特定版本的变更历史提供了便利。

Spring Cloud 版本信息

英文名称中文名称终结版本Boot大版本Boot代表说明GA版本
Angel安吉尔SR61.2.x1.2.8GA
Brixton布里克斯顿SR71.3.x1.3.8GA
Camden卡梅登SR71.4.x1.4.2GA
Dalston达斯顿SR51.5.x*GA
Edgware艾奇韦尔SR51.5.x1.5.19GA
Finchley芬奇利SR22.0.x2.0.8GA
Greenwich格林威治SR62.1.x2.1.2GA
Hoxton霍克斯顿SR122.2.x2.2.6 [2.2.x, 2.3.x (Starting with SR5)]GA
2020.0.6-aka Ilford埃福的GA2.5.7(0.5版本)2.4.x, 2.5.x (Starting with 2020.0.3)GA
2021.0.6 Jubilee朱比利GA2.6.x2.6.1,Spring版本5.3.13。2021.0.7 SNAPSHOTGA
2022.0.0 Kilburn基尔伯恩GA3.0.xSpring Framework 6.x 和 Spring Boot 3.x,最低Java17,兼容 Jakarta EEGA

核心功能

Spring Cloud 提供了以下核心功能:

  • 服务注册与发现:通过 Eureka、Consul、Zookeeper 等实现服务的注册和发现
  • 配置管理:通过 Config Server 实现集中化的配置管理
  • 服务网关:通过 Gateway 或 Zuul 实现 API 网关功能
  • 断路器:通过 Hystrix 或 Resilience4j 实现服务熔断和降级
  • 负载均衡:通过 Ribbon 或 LoadBalancer 实现客户端负载均衡
  • 分布式追踪:通过 Sleuth 和 Zipkin 实现分布式系统的链路追踪

常用注解

Spring Cloud 是一个基于 Spring Boot 的分布式系统开发工具集,它提供了一系列的注解来简化微服务架构中常见的模式和功能实现。以下是一些常用的 Spring Cloud 注解:

  1. @EnableDiscoveryClient

    • 用于启用服务发现客户端,通常与 Eureka、Consul 或 Zookeeper 等服务注册中心一起使用。
  2. @RibbonClient

    • 配置特定服务的 Ribbon 客户端,Ribbon 是 Netflix 提供的一个负载均衡器。
  3. @FeignClient

    • 用来定义 Feign 客户端接口,Feign 是一个声明式的 Web Service 客户端,使得编写 HTTP API 的调用变得更加简单。
  4. @HystrixCommand

    • 标记方法以启用熔断器(Circuit Breaker)模式,当远程调用失败达到一定阈值时自动跳闸,防止雪崩效应。
  5. @RefreshScope

    • 使 Bean 支持配置文件的动态刷新,适用于需要在运行时根据环境变化调整行为的组件。
  6. @LoadBalanced

    • 添加到 RestTemplate 或 WebClient 实例上,以启用其负载均衡能力。
  7. @ServiceInstanceListSupplier

    • 自定义服务实例列表供应者,可以用于扩展默认的服务发现机制。
  8. @ConfigurationProperties

    • 绑定配置属性到 JavaBean 上,支持宽松匹配和类型安全的配置注入。
  9. @Value("${property}")

    • 直接从配置文件中注入属性值,虽然这不是 Spring Cloud 特有的注解,但在微服务环境中非常常用。
  10. @Primary

    • 指定多个相同类型的 Bean 中哪个是首选的,这在有多个实现类的情况下很有用。
  11. @ConditionalOnProperty

    • 根据配置文件中的属性是否存在或具有特定值来有条件地加载 Bean。
  12. @ConditionalOnExpression

    • 使用 SpEL 表达式来决定是否应该创建某个 Bean。
  13. @ConditionalOnClass / @ConditionalOnMissingClass

    • 分别检查类路径下是否存在或不存在某个类时才创建 Bean。
  14. @ConditionalOnBean / @ConditionalOnMissingBean

    • 根据上下文中是否存在指定类型的 Bean 来决定是否创建新的 Bean。
  15. @EnableZuulProxy / @EnableZuulServer

    • 启用 Zuul 作为 API Gateway,分别代表代理模式和服务端模式。

这些只是 Spring Cloud 提供的一部分注解,每个模块还可能包含更多专门针对该模块特性的注解。随着 Spring Cloud 生态系统的不断进化,可能会引入新的注解或者对现有注解进行改进。

参考资料