1. Spring Cloud 引言
首先我们打开spring 的官网:https://spring.io/
我们会看到这样一张图片
这个图片告诉我们,开发我们的应用程序就像盖楼一样,
首先我们需要搭建Spring Boot, 在此基础上可以搭建Spring Cloud,再往上面可以搭建Spring Cloud Data Flow
2.Spring Cloud 概述
协调:分布式系统简化
构建分布式系统不需要很复杂且容易出错。
Spring Cloud为最常见的分布式系统模式提供了简单易用的编程模型,帮助开发人员构建弹性,可靠和协调的应用程序。
Spring Cloud建立在Spring Boot的基础之上,使开发人员可以轻松上手并快速提高生产力。
看到这个图片是不是一脸懵逼?不要怕,下面我们就一次来讲解上面图片是神马东东。
2.1 Spring Cloud 核心特色
2.1.1 服务发现(Service Discovery)
一个动态目录,支持客户端负载平衡和智能路由
2.1.2 断路器 (Circuit Breaker)
微型服务容错与监控仪表板
2.1.3 配置服务器 (Configuration Server)
为您的分散式应用程序提供动态,集中的配置管理
2.1.4 API 网关(API Gateway)
API消费者(浏览器,设备,其他API)的单一入口点
2.1.5 分布式追踪(Distributed Tracing)
分布式系统的自动应用程序检测和操作可见性
2.1.6 OAuth2
支持单点登录,令牌中继和令牌交换
2.1.7 Consumer-Driven Contracts
服务演进模式支持基于HTTP和基于消息的API
2.2 Spring Cloud 参考手册
Spring Cloud 参考手册:http://cloud.spring.io/spring-cloud-static/Edgware.SR3/
Getting Started Guides
- Config 配置
- Registry 注册
- Breakers 断路器
- Load Balancing 负载均衡
- Routing 路由
3. Spring Cloud
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,领导选举,分布式 会话,群集状态)。 分布式系统的协调导致锅炉板模式,使用Spring Cloud开发人员可以快速站出实现这些模式的服务和应用程序。 它们可以在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心以及Cloud Foundry等托管平台。
Spring Cloud通过提供一大堆库来增强应用程序在添加到类路径时的行为,从而构建Spring Boot。
您可以利用基本的默认行为来快速入门,然后在需要时可以配置或扩展以创建自定义解决方案。
3.1 快速开始
发行版标签(见下文)实际上只在一个工件中明确使用:“spring-cloud-dependencies”(所有其他标签都有与其父项目相关的普通数字发布标签)。
灵活性POM是您可以用作依赖关系管理的物料清单。 使用配置客户端和eureka的最新版本的示例(更改工件标识以引入其他启动器):
在项目中开始使用spring-cloud的推荐方法是使用依赖管理系统 - 下面的代码片段可以复制并粘贴到您的构建中。 需要帮忙? 请参阅我们有关使用Maven和Gradle构建的入门指南。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.M9</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId></groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId></groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> </dependencies>
<repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/libs-milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
3.2 特色
Spring Cloud专注于为典型用例和可扩展性机制提供良好的即时体验,以覆盖其他人。
- 分布式/版本化配置
- 服务注册和发现
- 路由
- 服务对服务呼叫
- 负载均衡
- 断路器
- 全局锁定
- 领导选举和集群状态
- 分布式消息
Spring Cloud采用非常明确的方法,通常只有类路径更改和/或注释才能获得许多功能。 作为发现客户端的示例应用程序:
@SpringBootApplication @EnableDiscoveryClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
3.3 主要的项目
由git存储库支持的集中式外部配置管理。 配置资源直接映射到Spring`Environment`,但如果需要可以由非Spring应用程序使用。
与各种Netflix OSS组件(Eureka,Hystrix,Zuul,Archaius等)集成。
用于将服务和服务实例与分布式消息一起链接的事件总线。 用于跨群集传播状态更改(例如配置更改事件)。
将您的应用程序与Pivotal Cloud Foundry集成。 提供服务发现实现,还可以轻松实现受SSO和OAuth2保护的资源。
为构建实现Open Service Broker API的服务代理提供了一个起点。
领导选举和常见的有状态模式,为Zookeeper,Redis,Hazelcast,Consul提供和实施。
与Hashicorp Consul进行服务发现和配置管理。
为Zuul代理中的负载均衡OAuth2休息客户端和身份验证报头中继提供支持。
Spring Cloud应用程序的分布式跟踪,与Zipkin,HTrace和基于日志的(例如ELK)跟踪兼容。
现代运行时组合式微服务应用程序的云本地编排服务。 易于使用的DSL,拖放式GUI和REST-API一起简化了基于微服务的数据管道的整体编排。
轻量级事件驱动的微服务框架,可快速构建可连接到外部系统的应用程序。 使用Apache Kafka或RabbitMQ在Spring Boot应用程序之间发送和接收消息的简单声明模型。
Spring Cloud Stream App Starters是基于Spring Boot的Spring Integration应用程序,可与外部系统集成。
一个短命的微服务框架,用于快速构建执行有限数据处理的应用程序。 向Spring Boot应用程序添加功能性和非功能性功能的简单声明。
Spring Cloud任务应用程序启动器是Spring Boot应用程序,可能是任何进程,包括不能永久运行的Spring Batch作业,并且会在有限的数据处理期结束/停止。
使用Apache Zookeeper进行服务发现和配置管理。
与托管的Amazon Web Services轻松集成。 它提供了一种使用众所周知的Spring成语和API(如消息传递或缓存API)与AWS提供的服务进行交互的便捷方式。
开发人员可以围绕托管服务构建应用程序,而无需关心基础架构或维护。
让各种平台上的PaaS应用程序轻松连接到后端服务,如数据库和消息代理(该项目以前称为“Spring Cloud”)。
Spring Boot式初学者项目,可以减轻Spring Cloud消费者的依赖性管理。 (作为一个项目终止并与Angel.SR2之后的其他项目合并。)
Spring Boot CLI插件,用于在Groovy中快速创建Spring Cloud组件应用程序
Spring Cloud Contract是一个涵盖各种解决方案的综合项目,可帮助用户成功实施消费者驱动合同方法。
Spring Cloud Gateway是基于Project Reactor的智能可编程路由器。
Spring Cloud OpenFeign通过自动配置和绑定到Spring Environment和其他Spring编程模型成语来为Spring Boot应用程序提供集成。
Release Trains
Spring Cloud是一个由独立项目组成的综合项目,原则上它有不同的发布节奏。 为了管理投资组合,BOM(物料清单)与个别项目(参见下文)中的一组策略一起发布。 发行版有名称,而不是版本,以避免与子项目混淆。 名称是一个字母顺序(所以你可以按时间顺序排列)与伦敦地铁站的名字(“天使”是第一个版本,“布里克斯顿”是第二个)。 当单个项目的点数累积达到临界质量时,或者其中一个项目的关键缺陷需要提供给每个人时,发布培训将推出名为“.SRX”的“服务版本”, 其中“X”是一个数字。
发布内容列表
Component | Edgware.SR3 | Finchley.M9 | Finchley.BUILD-SNAPSHOT |
---|---|---|---|
spring-cloud-aws | 1.2.2.RELEASE | 2.0.0.M4 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-bus | 1.3.2.RELEASE | 2.0.0.M7 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-cli | 1.4.1.RELEASE | 2.0.0.M1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-commons | 1.3.3.RELEASE | 2.0.0.M9 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-contract | 1.2.4.RELEASE | 2.0.0.M8 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-config | 1.4.3.RELEASE | 2.0.0.M9 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-netflix | 1.4.4.RELEASE | 2.0.0.M8 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-security | 1.2.2.RELEASE | 2.0.0.M3 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-cloudfoundry | 1.1.1.RELEASE | 2.0.0.M3 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-consul | 1.3.3.RELEASE | 2.0.0.M7 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-sleuth | 1.3.3.RELEASE | 2.0.0.M9 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-stream | Ditmars.SR3 | Elmhurst.RC3 | Elmhurst.BUILD-SNAPSHOT |
spring-cloud-zookeeper | 1.2.1.RELEASE | 2.0.0.M7 | 2.0.0.BUILD-SNAPSHOT |
spring-boot | 1.5.10.RELEASE | 2.0.0.RELEASE | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-task | 1.2.2.RELEASE | 2.0.0.M3 | 2.0.0.RELEASE |
spring-cloud-vault | 1.1.0.RELEASE | 2.0.0.M6 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-gateway | 1.0.1.RELEASE | 2.0.0.M9 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-openfeign | 2.0.0.M2 | 2.0.0.BUILD-SNAPSHOT |
Finchley构建并使用Spring Boot 2.0.x,并且不希望与Spring Boot 1.5.x一起使用。
Dalston和Edgware发行版建立在Spring Boot 1.5.x上,并且不希望与Spring Boot 2.0.x一起使用。
Camden发行版建立在Spring Boot 1.4.x上,但也使用1.5.x进行测试。
注意:Brixton和Angel发布的列车在2017年7月被标记为生命周期(EOL)。
Brixton发行版建立在Spring Boot 1.3.x的基础上,但也使用1.4.x进行测试。
天使版本系列建立在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.x中的OAuth2功能时(大多数情况下它们被移植到1.3.0中的Spring Boot)需要进行更改。
使用您的依赖管理工具来控制版本。如果您使用的是Maven,请记住第一个版本声明为胜,所以按照顺序声明BOM,第一个版本通常是最新的版本(例如,如果要使用Spring Boot 1.3.6和Brixton.RELEASE,则将Boot BOM第一)。如果您使用Spring依赖管理插件,则同样的规则适用于Gradle。
注意:发行版包含弹簧云依赖项以及spring-cloud-starter-parent。您可以像使用spring-boot-starter-parent一样使用父级(如果您使用的是Maven)。如果您只需要依赖管理,“依赖”版本是同一事物(仅包含依赖管理,无插件声明或对Spring或Spring Boot的直接引用)的BOM-only版本。如果您使用Spring Boot父POM,则可以使用Spring Cloud中的BOM。情况正好相反:使用云端父级使得不可能或至少不可靠,也可以使用启动物料清单来更改Spring Boot的版本及其依赖关系。