主题
Spring Cloud
Spring Cloud作为一个大型的微服务框架,它整合了多种服务于微服务架构的组件和工具,通过提供一系列子项目来实现微服务间的治理、配置管理、服务发现、断路器、智能路由等功能。为了管理这些子项目的集成和发布,Spring Cloud采取了一种独特的版本命名方式和版本管理策略,以确保用户能够清晰地理解和使用不同版本的组件。
版本命名规则
Spring Cloud的版本命名放弃了传统的数字序列,而采用伦敦地铁站的名字作为版本代号,这些名称按照字母表的顺序排列,以此来表示版本的时间顺序。例如,最早的Release版本被称为Angel,随后的版本依次可能是Brixton、Camden等,每个站点名称代表一个主要版本。
版本组成部分
主版本名称:使用伦敦地铁站名称,反映版本发布时间的先后顺序。
SR(Service Releases)后缀及其编号:在每个主版本发布之后,随着bug修复、小功能增强或安全更新的积累,会发布一系列的服务更新版本,称为"Service Releases"。这里的
SR6、SR5即是此类更新的标识,其中数字部分表示这是该主版本下的第几次服务更新。
版本策略的意义
采用这种命名方式和版本策略,Spring Cloud能够清晰地区分不同阶段的发布内容,同时避免了传统数字版本号可能带来的混淆。用户可以直观地了解到某个版本是相对较新的还是较旧的,并且通过SR的编号判断该版本包含了哪些后续的修正和优化。此外,这种方式也为跟踪和回溯特定版本的变更历史提供了便利。
Spring Cloud 版本信息
| 英文名称 | 中文名称 | 终结版本 | Boot大版本 | Boot代表说明 | GA版本 |
|---|---|---|---|---|---|
| Angel | 安吉尔 | SR6 | 1.2.x | 1.2.8 | GA |
| Brixton | 布里克斯顿 | SR7 | 1.3.x | 1.3.8 | GA |
| Camden | 卡梅登 | SR7 | 1.4.x | 1.4.2 | GA |
| Dalston | 达斯顿 | SR5 | 1.5.x | * | GA |
| Edgware | 艾奇韦尔 | SR5 | 1.5.x | 1.5.19 | GA |
| Finchley | 芬奇利 | SR2 | 2.0.x | 2.0.8 | GA |
| Greenwich | 格林威治 | SR6 | 2.1.x | 2.1.2 | GA |
| Hoxton | 霍克斯顿 | SR12 | 2.2.x | 2.2.6 [2.2.x, 2.3.x (Starting with SR5)] | GA |
| 2020.0.6-aka Ilford | 埃福的 | GA | 2.5.7(0.5版本) | 2.4.x, 2.5.x (Starting with 2020.0.3) | GA |
| 2021.0.6 Jubilee | 朱比利 | GA | 2.6.x | 2.6.1,Spring版本5.3.13。2021.0.7 SNAPSHOT | GA |
| 2022.0.0 Kilburn | 基尔伯恩 | GA | 3.0.x | Spring Framework 6.x 和 Spring Boot 3.x,最低Java17,兼容 Jakarta EE | GA |
核心功能
Spring Cloud 提供了以下核心功能:
- 服务注册与发现:通过 Eureka、Consul、Zookeeper 等实现服务的注册和发现
- 配置管理:通过 Config Server 实现集中化的配置管理
- 服务网关:通过 Gateway 或 Zuul 实现 API 网关功能
- 断路器:通过 Hystrix 或 Resilience4j 实现服务熔断和降级
- 负载均衡:通过 Ribbon 或 LoadBalancer 实现客户端负载均衡
- 分布式追踪:通过 Sleuth 和 Zipkin 实现分布式系统的链路追踪
常用注解
Spring Cloud 是一个基于 Spring Boot 的分布式系统开发工具集,它提供了一系列的注解来简化微服务架构中常见的模式和功能实现。以下是一些常用的 Spring Cloud 注解:
@EnableDiscoveryClient
- 用于启用服务发现客户端,通常与 Eureka、Consul 或 Zookeeper 等服务注册中心一起使用。
@RibbonClient
- 配置特定服务的 Ribbon 客户端,Ribbon 是 Netflix 提供的一个负载均衡器。
@FeignClient
- 用来定义 Feign 客户端接口,Feign 是一个声明式的 Web Service 客户端,使得编写 HTTP API 的调用变得更加简单。
@HystrixCommand
- 标记方法以启用熔断器(Circuit Breaker)模式,当远程调用失败达到一定阈值时自动跳闸,防止雪崩效应。
@RefreshScope
- 使 Bean 支持配置文件的动态刷新,适用于需要在运行时根据环境变化调整行为的组件。
@LoadBalanced
- 添加到 RestTemplate 或 WebClient 实例上,以启用其负载均衡能力。
@ServiceInstanceListSupplier
- 自定义服务实例列表供应者,可以用于扩展默认的服务发现机制。
@ConfigurationProperties
- 绑定配置属性到 JavaBean 上,支持宽松匹配和类型安全的配置注入。
@Value("${property}")
- 直接从配置文件中注入属性值,虽然这不是 Spring Cloud 特有的注解,但在微服务环境中非常常用。
@Primary
- 指定多个相同类型的 Bean 中哪个是首选的,这在有多个实现类的情况下很有用。
@ConditionalOnProperty
- 根据配置文件中的属性是否存在或具有特定值来有条件地加载 Bean。
@ConditionalOnExpression
- 使用 SpEL 表达式来决定是否应该创建某个 Bean。
@ConditionalOnClass / @ConditionalOnMissingClass
- 分别检查类路径下是否存在或不存在某个类时才创建 Bean。
@ConditionalOnBean / @ConditionalOnMissingBean
- 根据上下文中是否存在指定类型的 Bean 来决定是否创建新的 Bean。
@EnableZuulProxy / @EnableZuulServer
- 启用 Zuul 作为 API Gateway,分别代表代理模式和服务端模式。
这些只是 Spring Cloud 提供的一部分注解,每个模块还可能包含更多专门针对该模块特性的注解。随着 Spring Cloud 生态系统的不断进化,可能会引入新的注解或者对现有注解进行改进。