如何学习spring cloud
Spring Cloud 学习笔记(一)——入门、特征、配置
0 放在前面
0.1 参考文档
http://cloud.spring.io/spring-cloud-static/Brixton.SR7/
https://springcloud.cc/
http://projects.spring.io/spring-cloud/
0.2 maven配置
org.springframework.boot
spring-boot-starter-parent
1.5.2.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Dalston.RELEASE
pom
import
org.springframework.cloud
spring-cloud-starter-config
org.springframework.cloud
spring-cloud-starter-eureka
0.3 简介
Spring Cloud为开发人员提供了快速构建分布式系统中的一些通用模式(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式 会话,群集状态)。 分布式系统的协调引出样板模式(boiler plate patterns),并且使用Spring Cloud开发人员可以快速地实现这些模式来启动服务和应用程序。 它们可以在任何分布式环境中正常工作,包括开发人员自己的笔记本电脑,裸机数据中心和受管平台,如Cloud Foundry。
Version: Brixton.SR7
1 特征
Spring Cloud专注于为经典用例和扩展机制提供良好的开箱即用
分布式/版本配置
服务注册与发现
路由选择
服务调用
负载均衡
熔断机制
全局锁
领导人选举和集群状态
分布式消息
2 原生云应用程序
原生云是应用程序开发的一种风格,鼓励在持续交付和价值驱动领域的最佳实践。
Spring Cloud的很多特性是基于Spring Boot的。更多的是由两个库实现:Spring Cloud Context and Spring Cloud Commons。
2.1 Spring Cloud Context: 应用上下文服务
Spring Boot关于使用Spring构建应用有硬性规定:通用的配置文件在固定的位置,通用管理终端,监控任务。建立在这个基础上,Spring Cloud增加了一些额外的特性。
2.1.1 引导应用程序上下文
Spring Cloud会创建一个“bootstrap”的上下文,这是主应用程序的父上下文。对应的配置文件拥有最高优先级,并且,默认不能被本地配置文件覆盖。对应的文件名bootstrap.yml或bootstrap.properties。
可通过设置spring.cloud.bootstrap.enabled=false来禁止bootstrap进程。
2.1.2 应用上下文层级结构
当用SpringApplication或SpringApplicationBuilder创建应用程序上下文时,bootstrap上下文将作为父上下文被添加进去,子上下文将继承父上下文的属性。
子上下文的配置信息可覆盖父上下文的配置信息。
2.1.3 修改Bootstrap配置文件位置
spring.cloud.bootstrap.name(默认是bootstrap),或者spring.cloud.bootstrap.location(默认是空)
2.1.4 覆盖远程配置文件的值
spring.cloud.config.allowOverride=true
spring.cloud.config.overrideNone=true
spring.cloud.config.overrideSystemProperties=false
2.1.5 定制Bootstrap配置
在/META-INF/spring.factories的key为org.springframework.cloud.bootstrap.BootstrapConfiguration,定义了Bootstrap启动的组件。
在主应用程序启动之前,一开始Bootstrap上下文创建在spring.factories文件中的组件,然后是@Beans类型的bean。
2.1.6 定制Bootstrap属性来源
关键点:spring.factories、PropertySourceLocator
2.1.7 环境改变
应用程序可通过EnvironmentChangedEvent监听应用程序并做出响应。
2.1.8 Refresh Scope
Spring的bean被@RefreshScope将做特殊处理,可用于刷新bean的配置信息。
注意
需要添加依赖“org.springframework.boot.spring-boot-starter-actuator”
目前我只在@Controller测试成功
需要自己发送POST请求/refresh
修改配置文件即可
2.1.9 加密和解密
Spring Cloud可对配置文件的值进行加密。
如果有"Illegal key size"异常,那么需要安装JCE。
2.1.10 服务点
除了Spring Boot提供的服务点,Spring Cloud也提供了一些服务点用于管理,注意都是POST请求
/env:更新Environment、重新绑定@ConfigurationProperties跟日志级别
/refresh重新加载配置文件,刷新标记@RefreshScope的bean
/restart重启应用,默认不可用
生命周期方法:/pause、/resume
2.2 Spring Cloud Commons:通用抽象
服务发现、负载均衡、熔断机制这种模式为Spring Cloud客户端提供了一个通用的抽象层。
2.2.1 RestTemplate作为负载均衡客户端
通过@Bean跟@LoadBalanced指定RestTemplate。注意URI需要使用虚拟域名(如服务名,不能用域名)。
如下:
@Configuration
public class MyConfiguration {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
}
public class MyClass {
@Autowired
private RestTemplate restTemplate;
public String doOtherStuff() {
String results = restTemplate.getForObject("http://stores/stores", String.class);
return results;
}
}
2.2.2 多个RestTemplate对象
注意@Primary注解的使用。
@Configuration
public class MyConfiguration {
@LoadBalanced
@Bean
RestTemplate loadBalanced() {
return new RestTemplate();
}
@Primary
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
}
public class MyClass {
@Autowired
private RestTemplate restTemplate;
@Autowired
@LoadBalanced
private RestTemplate loadBalanced;
public String doOtherStuff() {
return loadBalanced.getForObject("http://stores/stores", String.class);
}
public String doStuff() {
return restTemplate.getForObject("http://example.com", String.class);
}
}
2.2.3 忽略网络接口
忽略确定名字的服务发现注册,支持正则表达式配置。
3 Spring Cloud Config
Spring Cloud Config提供服务端和客户端在分布式系统中扩展配置。支持不同环境的配置(开发、测试、生产)。使用Git做默认配置后端,可支持配置环境打版本标签。
3.1 快速开始
可通过IDE运行或maven运行。
默认加载property资源的策略是克隆一个git仓库(at spring.cloud.config.server.git.uri')。
HTTP服务资源的构成:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
application是SpringApplication的spring.config.name,(一般来说'application'是一个常规的Spring Boot应用),profile是一个active的profile(或者逗号分隔的属性列表),label是一个可选的git标签(默认为"master")。
3.1.1 客户端示例
创建以Spring Boot应用即可,添加依赖“org.springframework.cloud:spring-cloud-starter-config”。
配置application.properties,注意URL为配置服务端的地址
spring.cloud.config.uri: http://myconfigserver.com
3.2 Spring Cloud Config 服务端
针对系统外的配置项(如name-value对或相同功能的YAML内容),该服务器提供了基于资源的HTTP接口。使用@EnableConfigServer注解,该服务器可以很容易的被嵌入到Spring Boot 系统中。使用该注解之后该应用系统就是一个配置服务器。
@SpringBootApplication
@EnableConfigServer
public class ConfigApplicion {
public static void main(String[] args) throws Exception {
SpringApplication.run(ConfigApplicion.class, args);
}
}
3.2.1 资源库环境
{application} 对应客户端的"spring.application.name"属性
{profile} 对应客户端的 "spring.profiles.active"属性(逗号分隔的列表)
{label} 对应服务端属性,这个属性能标示一组配置文件的版本
如果配置库是基于文件的,服务器将从application.yml和foo.yml中创建一个Environment对象。高优先级的配置优先转成Environment对象中的PropertySource。
3.2.1.1 Git后端
默认的EnvironmentRepository是用Git后端进行实现的,Git后端对于管理升级和物理环境是很方便的,对审计配置变更也很方便。也可以file:前缀从本地配置库中读取数据。
这个配置库的实现通过映射HTTP资源的{label}参数作为git label(提交id,分支名称或tag)。如果git分支或tag的名称包含一个斜杠 ("/"),此时HTTP URL中的label需要使用特殊字符串"(_)"来替代(为了避免与其他URL路径相互混淆)。如果使用了命令行客户端如 curl,请谨慎处理URL中的括号(例如:在shell下请使用引号''来转义它们)。
Git URI占位符
Spring Cloud Config Server支持git库URL中包含针对{application}和 {profile}的占位符(如果你需要,{label}也可包含占位符, 不过要牢记的是任何情况下label只指git的label)。所以,你可以很容易的支持“一个应用系统一个配置库”策略或“一个profile一个配置库”策略。
模式匹配和多资源库
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
repos:
simple: https://github.com/simple/config-repo
special:
pattern: special*/dev*,*special*/dev*
uri: https://github.com/special/config-repo
local:
pattern: local*
uri: file:/home/configsvc/config-repo
如果 {application}/{profile}不能匹配任何表达式,那么将使用“spring.cloud.config.server.git.uri”对应的值。在上例子中,对于 "simple" 配置库, 匹配模式是simple/* (也就说,无论profile是什么,它只匹配application名称为“simple”的应用系统)。“local”库匹配所有application名称以“local”开头任何应用系统,不管profiles是什么(来实现覆盖因没有配置对profile的匹配规则,“/*”后缀会被自动的增加到任何的匹配表达式中)。
Git搜索路径中的占位符
spring.cloud.config.server.git.searchPaths
3.2.1.2 版本控制后端文件系统使用
伴随着版本控制系统作为后端(git、svn),文件都会被check out或clone 到本地文件系统中。默认这些文件会被放置到以config-repo-为前缀的系统临时目录中。在Linux上,譬如应该是/tmp/config-repo-目录。有些操作系统routinely clean out放到临时目录中,这会导致不可预知的问题出现。为了避免这个问题,通过设置spring.cloud.config.server.git.basedir或spring.cloud.config.server.svn.basedir参数值为非系统临时目录。
3.2.1.3 文件系统后端
使用本地加载配置文件。
需要配置:spring.cloud.config.server.native.searchLocations跟spring.profiles.active=native。
路径配置格式:classpath:/, classpath:/config,file:./, file:./config。
3.2.1.4 共享配置给所有应用
基于文件的资源库
在基于文件的资源库中(i.e. git, svn and native),这样的文件名application*命名的资源在所有的客户端都是共享的(如 application.properties, application.yml, application-*.properties,etc.)。
属性覆盖
“spring.cloud.config.server.overrides”添加一个Map类型的name-value对来实现覆盖。
例如
spring:
cloud:
config:
server:
overrides:
foo: bar
会使所有的配置客户端应用程序读取foo=bar到他们自己配置参数中。
3.2.2 健康指示器
通过这个指示器能够检查已经配置的EnvironmentRepository是否正常运行。
通过设置spring.cloud.config.server.health.enabled=false参数来禁用健康指示器。
3.2.3 安全
你可以自由选择任何你觉得合理的方式来保护你的Config Server(从物理网络安全到OAuth2 令牌),同时使用Spring Security和Spring Boot 能使你做更多其他有用的事情。
为了使用默认的Spring Boot HTTP Basic 安全,只需要把Spring Security 增加到classpath中(如org.springframework.boot.spring-boot-starter-security)。默认的用户名是“user”,对应的会生成一个随机密码,这种情况在实际使用中并没有意义,一般建议配置一个密码(通过 security.user.password属性进行配置)并对这个密码进行加密。
3.2.4 加密与解密
如果远程属性包含加密内容(以{cipher}开头),这些值将在通过HTTP传递到客户端之前被解密。
使用略
3.2.5 密钥管理
配置服务可以使用对称(共享)密钥或者非对称密钥(RSA密钥对)。
使用略
3.2.6 创建一个测试密钥库
3.2.7 使用多密钥和循环密钥
3.2.8 加密属性服务
3.3 可替换格式服务
配置文件可加后缀".yml"、".yaml"、".properties"
3.4 文本解释服务
/{name}/{profile}/{label}/{path}
3.5 嵌入配置服务器
一般配置服务运行在单独的应用里面,只要使用注解@EnableConfigServer即可嵌入到其他应用。
3.6 推送通知和总线
添加依赖spring-cloud-config-monitor,激活Spring Cloud 总线,/monitor端点即可用。
当webhook激活,针对应用程序可能已经变化了的,配置服务端将发送一个RefreshRemoteApplicationEvent。
3.7 客户端配置
3.7.1 配置第一次引导
通过spring.cloud.config.uri属性配置Config Server地址
3.7.2 发现第一次引导
如果用的是Netflix,则用eureka.client.serviceUrl.defaultZone进行配置。
3.7.3 配置客户端快速失败
在一些例子里面,可能希望在没有连接配置服务端时直接启动失败。可通过spring.cloud.config.failFast=true进行配置。
3.7.4 配置客户端重试
添加依赖spring-retry、spring-boot-starter-aop,设置spring.cloud.config.failFast=true。默认的是6次重试,初始补偿间隔是1000ms,后续补偿为1.1指数乘数,可通过spring.cloud.config.retry.*配置进行修改。
3.7.5 定位远程配置资源
路径:/{name}/{profile}/{label}
"name" = ${spring.application.name}
"profile" = ${spring.profiles.active} (actually Environment.getActiveProfiles())
"label" = "master"
label对于回滚到之前的版本很有用。
3.7.6 安全
通过spring.cloud.config.password、spring.cloud.config.username进行配置。
第1天:查看spring boot官方文档,实现及实验spring boot 应用。
第2天:熟读spring cloud官方文档配置管理部分并熟悉配置管理相关概念。
第3天:熟悉Git概念,并上传配置文件到Git服务器,最后实现分布式配置管理。
第4天:熟读spring cloud官方文档服务注册部分,实现服务注册及发现。
相信大家在看到cloud这个单词时首先想到的便是“云”或“云计算”,其实这里并不是这个意思,Spring cloud是以Spring boot为基础的快速构建分布式系统的工具集。它整合了各种各样的工具,以方便我们开发。由于它是在Spring boot的基础上构建的,因此Spring cloud拥有Spring boot所拥有的特点。
二、Spring cloud的版本特点
下图是我从Spring cloud官网截的一张图,大部分Spring软件版本都是以:主版本.次版本.增量版本.开发或发布版本的形式存在的,比如下图左边用红色框住的版本:1.4.4.RELEASE。1代表主版本,第一个4代表次版本,第二个4代表修改版本,而RELEASE代表发布版本。
而Spring cloud的版本却是“Angel SR6”这样的形式,我们可以把Angel当做Spring cloud的大版本,而SR6是Service Release版本(即Bug修复版本)
spring cloud越来越流行了,以前dubbo用得比较多,现在springcloud用得多了,
学习springcloud主要是学一系列组件
Eureka,服务注册中心,特性有失效剔除、服务保护,相当于zookeeper,(重要的)。
Dashboard,Hystrix仪表盘,监控集群模式和单点模式,集群模式需要收集器Turbine配合。
Zuul,API服务网关,功能有路由分发和过滤(重要的)。
Config,分布式配置中心,支持本地仓库、SVN、Git、Jar包内配置等模式,(重要的)
Ribbon,客户端负载均衡,特性有区域亲和、重试机制,(重要的)。
Hystrix,客户端容错保护,特性有服务降级、服务熔断、请求缓存、请求合并、依赖隔离(重要的)。
Feign,声明式服务调用,本质上就是Ribbon+Hystrix,(重要的)
Stream,消息驱动,有Sink、Source、Processor三种通道
Bus,消息总线,配合Config仓库修改的一种Stream实现,
Sleuth,分布式服务追踪,需要搞清楚TraceID和SpanID以及抽样,如何与ELK整合。
如果要好好学习可以去这个网站看看 网页链接
应该怎样学习JAVA?顺序是什么?
第一部分:JavaSE:Java语言最基本的一套库 学习JavaEE或JavaME之前,JavaSE是必学的。Java开发环境搭建 Java基础语法 面向对象 数组 异常 集合 线程 IO流 反射机制 注解Annotation 网络编程 第二部分:数据库 【MySQL + JDBC】只要学习编程,数据库是一定要学习的,是一门公共的学科。java、C、python...
java该怎么自学?
主要包括如下模块:Dubbo,高性能的 RPC 服务发布和调用框架;SpringBoot,简化Spring应用的初始搭建以及开发过程;Spring Cloud,一系列框架的有序集合,如服务发现注册、配置中心、负载均衡、断路器、数据监控等。 该板块的学习,可以具备大型互联网项目开发的必备技术和实际经验,为进入BATJ打下基础 技术树 九、服务器中间件 ...
自学Java如何入门?
主要包括如下模块:Dubbo,高性能的 RPC 服务发布和调用框架;SpringBoot,简化Spring应用的初始搭建以及开发过程;Spring Cloud,一系列框架的有序集合,如服务发现注册、配置中心、负载均衡、断路器、数据监控等。该板块的学习,可以具备大型互联网项目开发的必备技术和实际经验,为进入BATJ打下基础 技术树 ...
Java开发学习的话,都要学什么内容?
第二阶段:中小型网站应用开发 阶段目的:掌握数据库设计与开发技能,熟练使用JAVAEE组件技术开发中小型网站应用。数据库(Oracle数据库管理及开发)、UI开发(WEB页面开发基础、XML、Ajax)、JAVAEE组件开发(jsp、servlet、jdbc)、框架技术(struts2.0、hibernate、spring、springMVC、mybatis)第三阶段:软...
如何从零开始学习Java?
入门的阶段首先知识点相对简单完全可以自学,并且在学习的过程中发现自己到底是否真的适合编程。免费120集入门教学视频:Java轻松入门经典教程(完整版)[柠檬学院]-学习视频教程-培训课程-腾讯课堂ke.qq.com第二步,搭建好开发环境和写一个HelloWorld,这是最简单的Java程序,但却是从无到有质的突破。也是...
小白自学JAVA怎么入门?
学习Java的四个阶段:一:Javase基础二:网页三剑客html+css+js三:JavaWeb和数据库:四:JavaEE框架:企业级开发,Struts2、Spring框架、Hibernate框架、Maven核心技术、MyBaits框架、高手进阶;如果找不到学习资源,可以点击这里下载。当你学完了Java,应该如何去找工作?一.最重要的还是自身技能,这是...
如何学习英语?
比如学习 Christmas一词时, 就联想到Children's Day,Women's Day, Teachers’Day,Tree—Planting Day,Mid—autumn Festival,National Day, New Year’s Day, Spring Festival等一系列的节日名词。 ③构词联想记忆:利用同根词(词形转换)联想记忆,注意词性。英语单 词中有许多词具有一词多性的特点,如open既可作...
昆明Java培训:为什么学习Java开发你知道吗?
主要学习与Spring的整合和Spring中的事务管理。一定要深入的了解数据库事务,这将对你今后的项目开发非常有帮助。最后我们来说控制层的学习,这里我建议大家重点学习SpringMVC。因为SpringMVC是目前使用最为广泛的控制层,而且简单易学,已经有了要替代Struts的趋势了。但是Struts还是要学习下,毕竟还有一些公司在用,这将为你...
Java学习七个阶段从学生变成大牛
当下,Java后端框架众多,集合使用为主。目前较为受欢迎的两大框架集合:SSH、SSM。SSH=Spring+Struts+Hibernate。SSM=Spring+SpringMVC+MyBatis。我目前在学习使用的SSM框架,Maven作为构建工具,似平这套技术栈越来越受欢迎。看实际情况来学习。框架就是工具,如果前面基础扎实了,对框架的学习上手就很快了...
Java从入门到精通一般要学习多久
Java面授班的学习时间大约半年,Java前景是很不错的,像Java这样的专业还是一线城市比较好,师资力量跟得上、就业的薪资也是可观的,学习Java可以按照路线图的顺序,0基础学习Java是没有问题的,关键是找到靠谱的Java培训机构,你可以深度了解机构的口碑情况,问问周围知道这家机构的人,除了口碑再了解机构的...
中鸦黄根: 第1天:查看spring boot官方文档,实现及实验spring boot 应用. 第2天:熟读spring cloud官方文档配置管理部分并熟悉配置管理相关概念. 第3天:熟悉Git概念,并上传配置文件到Git服务器,最后实现分布式配置管理. 第4天:熟读spring cloud官
南岸区15873109281: 如何使用Spring Cloud - ?
中鸦黄根: Spring Cloud项目的既定目标在于为Spring开发人员提供一整套易于使用的工具集,从而保证其轻松构建起自己需要的分布式系统方案.为了实现这一目标,Spring Cloud以Netflix OSS堆栈为基础将大量实现堆栈加以整合并打包.这些堆栈而后...
南岸区15873109281: 如何使用Spring Boot/Spring Cloud 实现微服务应用 - ?
中鸦黄根: Spring Cloud介绍 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简...
南岸区15873109281: spring cloud环境怎么搭建 - ?
中鸦黄根: 1 创建Spring一个简单的Java项目 首先在JAVA项目下创建一个lib文件夹把需要的Spring需要的jar包:Commons-logging.jar Spring.jar包放入一般都在项目文件夹中,并至暖瓶状态. 这两个包分别位于: spring-framework-2.5.6\dist\spring.jar sprin.
南岸区15873109281: 新手java工程师应该怎样学习? ?
中鸦黄根: 以前学习Java的时候是在如鹏网上面学习的,上面的课程体系比较详细,可以参考一下1、Java基础(java语言入门,java的基本语法,面向对象思想,常用类,mysql数据...
南岸区15873109281: springcloud用户权限怎么设计 - ?
中鸦黄根: 用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法:一种是全部利用配置文件,将用户、权限、资源(url)硬编码在xml文件中,已经实现过,并经过验证;二种是用户和权限用数据库存储,而资源(url)和权限的...
南岸区15873109281: 如何调用spring cloud微服务 - ?
中鸦黄根: spring-cloud调用服务有两种方式,一种是百Ribbon+RestTemplate, 另外一种是Feign.Ribbon是一个基于度HTTP和TCP客户端的负载均衡器,其实版feign也使用了ribbon, 只要使用@FeignClient时,权ribbon就会自动使用.
南岸区15873109281: 西天取经,学 Spring - Cloud,到底什么是 Spring - Cloud - ?
中鸦黄根: Spring Cloud 是Pivotal提 供的用于简化分布式系统构建的工具集.Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接器(Service Connector)的概念.云平台连接器是一个接口,需要由云平台提供者进行实现,以便库中的其他模块可以与该云平台协同工作.
南岸区15873109281: 如何入门 Python 爬虫 - ?
中鸦黄根: “入门”是良好的动机,但是可能作用缓慢.如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习.另外如果说知识体系里的每一个知识点是图里的点,依赖关系是边的话,那么这个图一定不是一...
南岸区15873109281: 如何学习Python爬虫 - ?
中鸦黄根: 其实网络爬虫就是模拟浏览器获取web页面的内容的过程,然后解析页面获取内容的过程.首先要熟悉web页面的结构,就是要有前端的基础,不一定要精通,但是一定要了解.然后熟悉python基础语法,相关库函数(比如beautifulSoup),以及相关框架比如pyspider等.建议刚开始不要使用框架,自己从零开始写,这样你能理解爬虫整个过程.推荐书籍:python网络数据采集 这本书,比较基础.