官方网站:http://spring.io/projects/spring-cloud
第一章 spring cloud 概述
1.1 spring cloud 包含的模式
spring cloud是一组开发工具包,这组工具包给分布式系统的开发者提供了通用的模式。
spring cloud 提供的通用的分布式模式包括:
1.配置管理
2.服务发现
3.熔断机制
4.智能路由
5.微服务代理
6.控制总线
7.一次性令牌
8.全局锁
9.领导选举
10.分布式会话
11.集群状态
1.2 spring cloud特性
spring cloud 专注于提供好的典型场景扩展体验和扩展机制,包括:
1.分布式/版本 配置
2.服务注册和服务发现
3.路由
4.服务对服务调用
5.负载均衡
6.熔断机制
7.全局锁
8.领导选举和集群状态
9.分布式消息
spring cloud 提供了非常简洁的声明式方法,你常常可以只修改一个路径或者使用一个注解,就能获得一组功能。
例如下面的例子:
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这个简单的类就是一个spring 服务发现客户端应用。
1.3 spring cloud主要的项目
1.3.1 Spring Cloud 配置
对外集中式的配置管理是用的git仓库进行实现的。这些配置的资源文件里的参数与spring的环境变量直接映射。但是,这些参数可以用在非spring项目中。
1.3.2 spring cloud 网飞
整合了网飞公司的一系列开源组件(例如Eureka, Hystrix, Zuul, Archaius,等)
1.3.3 spring cloud 总线
这种总线是一种事件总线,它通过分布式消息的方式,将服务实例与服务实例连接了起来。
1.3.4 spring cloud 云铸造厂
使用关键云铸造来整合应用。提供了一种服务发现的实现方式。这也使单点登录,auth2等保护资源的方式变得更简单。
1.3.5 spring cloud开发式服务的代理者
提供了服务代理的起点,也提供了构建开放式服务代理的接口。
1.3.6 spring cloud 集群
领导选举和公共状态模式,对Zookeeper, Redis, Hazelcast, Consul 进行了抽象,提供实现。
1.3.7 spring cloud 执行官(Consul)
服务发现和配置管理可以用 哈希科普(Hashicorp )执行官(Consul) 来 实现。
1.3.8 spring cloud 安全(Security)
提供对 负载平衡的OAuth2 rest客户端和zuul代理中的认证头中继提供支持
1.3.9 spring cloud 侦查(Sleuth)
Spring云应用的分布式跟踪,兼容Zipkin、HTrace和基于日志(例如ELK)的跟踪
1.3.10 spring cloud 数据流转(Data Flow)
一个对正在运行中的复杂微服务应用提供本地云编排的服务。易于使用的DSL,拖拽式的gui和rest风格的api共同简化了基于微服务的数字管道的总体编排。
1.3.11 spring cloud流(Stream)
一个轻量级的事件驱动的微服务框架,用来快速构建可以与外部进行连接的应用。在spring boot 应用之间,通过kafka或者RabbitMQ发送接收消息的简单声明的模型。
1.3.12 spring cloud流 应用启动器(Stream App Starters)
spring cloud 流应用启动器是基于spring boot的spring集成应用。提供了与外部系统的集成。
1.3.13 spring cloud 任务(Task)
一个短生命周期的微服务框架,用于快速构建执行有限数量数据处理的应用程序。简单描述为给spring boot 应用 增加功能性和非功能性特性
1.3.14 spring cloud 任务启动器(Task App Starters)
是spring boot应用程序,它可能是包含spring 批量任务的应用。这些批量任务不是一直执行的,他们在数据处理一段时间之后终止或者暂停。
1.3.15 spring cloud zookeeper
用Apache Zookeeper进行服务发现和配置管理
1.3.16 spring cloud AWS
使用托管的Amazon Web服务的简单集群。它提供了一种与AWS交互的简单方式,使用知名的spring风格的接口来提供服务,例如消息或缓存接口。开发者可以围绕着主机服务构建自己的应用,而不需要关心基础设施或维护。
1.3.17 spring cloud 连接器(Connectors)
使pass应用在不同的平台上更加简单,来连接后端服务,例如数据库和消息中间件(通常认为的“spring cloud项目”)
1.3.18 spring cloud 启动器(Starters)
spring-boot风格的项目启动器。以简化Spring Cloud用户的依赖管理。(在Angel.SR2版本之后,其他项目合并了,不再单独作为一个项目)
1.3.19 spring cloud CLI
spring cloud CLI插件,使用groovy语言来快速创建spring cloud 组件。
1.3.20 spring cloud 约定(Contract)
Spring Cloud Contract是一个包含解决方案的伞形项目,帮助用户成功地实现消费者驱动的契约方法。
1.3.21 spring cloud 网关(Gateway)
Spring云网关是一种基于工程反应器(Project Reactor)的智能可编程路由器。
1.3.22 spring cloud 开放想象(OpenFeign)
Spring Cloud OpenFeign通过自动配置和绑定到Spring环境和其他Spring编程模型习惯用法,为Spring引导应用程序提供集成。
1.3.23 spring cloud 管道(Pipelines)
spring cloud 管道提供了可选的部署通道,使用steps来保证你的应用可以零停机方式部署,并可以在出错的时候简单的回滚。
1.3.24 spring cloud 函数(Function)
spring cloud 函数通过函数保证了逻辑业务的实现。它提供了一种通过无服务提供者的统一的编程模型,和独立运行一样(单独运行或者在pass上运行)
1.4发行序列(截止2019.3.6)
spring cloud 是一个伞状的项目,包含了独立的项目,原则上这些不同的独立项目有不同的发行版本的节奏,互相不依赖。为了管理这些独立的项目组合,发布了一个Bom文件,这个bom文件对包含的单个项目的依赖,指定了发行序列。这些发行序列有名字,为了防止与子项目的版本号混淆,这个名字不是版本号。这些名字是字母序的(因此你可以按照时间顺序排列)。当单个项目的点发布累积到一个临界质量时,或者如果其中一个项目中有需要对每个人可用的关键bug,则发布序列将推出名称以“服务发布”结尾的“服务发布”。SRX",其中X是一个数字。
发布序列 | spring boot版本号 | |
Greenwich | 2.1.x | |
Finchley | 2.0.x | |
Edgware | 1.5.x | |
Dalston |
|
发布序列 内容
Component | Edgware.SR5 | Finchley.SR2 | Finchley.BUILD-SNAPSHOT |
---|---|---|---|
spring-cloud-aws |
1.2.3.RELEASE |
2.0.1.RELEASE |
2.0.1.BUILD-SNAPSHOT |
spring-cloud-bus |
1.3.3.RELEASE |
2.0.0.RELEASE |
2.0.1.BUILD-SNAPSHOT |
spring-cloud-cli |
1.4.1.RELEASE |
2.0.0.RELEASE |
2.0.1.BUILD-SNAPSHOT |
spring-cloud-commons |
1.3.5.RELEASE |
2.0.2.RELEASE |
2.0.2.BUILD-SNAPSHOT |
spring-cloud-contract |
1.2.6.RELEASE |
2.0.2.RELEASE |
2.0.2.BUILD-SNAPSHOT |
spring-cloud-config |
1.4.5.RELEASE |
2.0.2.RELEASE |
2.0.2.BUILD-SNAPSHOT |
spring-cloud-netflix |
1.4.6.RELEASE |
2.0.2.RELEASE |
2.0.2.BUILD-SNAPSHOT |
spring-cloud-security |
1.2.3.RELEASE |
2.0.1.RELEASE |
2.0.1.BUILD-SNAPSHOT |
spring-cloud-cloudfoundry |
1.1.2.RELEASE |
2.0.1.RELEASE |
2.0.1.BUILD-SNAPSHOT |
spring-cloud-consul |
1.3.5.RELEASE |
2.0.1.RELEASE |
2.0.2.BUILD-SNAPSHOT |
spring-cloud-sleuth |
1.3.5.RELEASE |
2.0.2.RELEASE |
2.0.2.BUILD-SNAPSHOT |
spring-cloud-stream |
Ditmars.SR4 |
Elmhurst.SR1 |
Elmhurst.BUILD-SNAPSHOT |
spring-cloud-zookeeper |
1.2.2.RELEASE |
2.0.0.RELEASE |
2.0.1.BUILD-SNAPSHOT |
spring-boot |
1.5.16.RELEASE |
2.0.6.RELEASE |
2.0.7.BUILD-SNAPSHOT |
spring-cloud-task |
1.2.3.RELEASE |
2.0.0.RELEASE |
2.0.1.BUILD-SNAPSHOT |
spring-cloud-vault |
1.1.2.RELEASE |
2.0.2.RELEASE |
2.0.2.BUILD-SNAPSHOT |
spring-cloud-gateway |
1.0.2.RELEASE |
2.0.2.RELEASE |
2.0.2.BUILD-SNAPSHOT |
spring-cloud-openfeign |
2.0.2.RELEASE |
2.0.2.BUILD-SNAPSHOT |
|
spring-cloud-function |
1.0.1.RELEASE |
1.0.0.RELEASE |
1.0.1.BUILD-SNAPSHOT |
Finchley 是用spring boot2.0.x构建起来的,不指望能用spring boot 1.5.x版本构建 发行名Finchley 的发行序列.
注意:1.Dalston 和Edgware 版本序列是用spring-boot 1.5.x构建的,不期待使用spring boot2.0.x 构建该发行序列
2.Camden 发行序列被标注为了最终序列。
Camden 发行序列用spring boot 1.4.x 构建,但是也使用1.5.x.
3.Brixton 和Angel 发行序列在2017年7月被标注为了最终发行序列。
Brixton发行序列用spring boot 1.3.x 构建,但是也使用1.4.x.
4.Angel 发行序列用spring boot 1.2.x构建,有些地方和spring boot 1.3.x不兼容。
Brixton 用spring boot 1.3.x构建,同样也不兼容 1.2.x .有些类库和应用使用Angel构建,将会在Brixton序列上运行良好,但是spring-cloud-security 1.0的OAuth2特性需要在任何地方进行更改。(他们大部分迁移到spring boot1.3.0版本上了)
使用你的依赖管理工具来控制版本。如果你使用maven记得第一个版本标记为wins,然后按顺序生命boms。第一个通常是最新的(例如,如果你想使用spring boot1.3.6 用Brixton.RELEASE发行序列,把boot的pom放在第一位)。同样的规则也是用Gradle,如果你使用sping的依赖管理工具的话。
5.发行序列包含了spring-cloud-dependencies也包含了spring-cloud-starter-parent 。您可以像使用spring-boot-starter-parent那样使用父类(如果你用的是maven的话)。如果你只需要依赖管理,“dependencies”版本和只有Bom版本是一回事(它只包含依赖管理,不包含插件和对spring ,spring boot的依赖)。如果你使用spring boot 父pom,那么你可以使用spring cloud的bom。反之则不成立。使用cloud父pom是不可能的或者至少是不可行的,使用boot 的pom更改spring boot和它的依赖版本也是一样。
6.讨论和视频
Beginner’s Guide To Spring Cloud :https://www.youtube.com/watch?v=aO3W-lYnw-o
7.快速启动
你可以使用spring initializr来启动应用:https://start.spring.io/