虽然自己还没实战完成,先把概念性的笔记下来。一套下来对SpringCloud的相关基础以及简单使用都可以有大概了解。(代码构建部分都是随手记得大概步骤,后期自己实战了再详细完善)
每个人模块都是围绕这三个问题去了解:它是什么?它是干嘛的?怎么使用?
使用三步骤:1.导入依赖 2.编写配置 3.开启注解 @Enablexxx
目录
5.5 DiscoverClient:注册进来的微服务,获取一些消息
5.6 Eureka集群:万一一个崩了所有服务都没了,所以集群。
10.2 SpringCloud Config分布式配置中心能干嘛?
1 背景
1.1 微服务的核心问题以及解决方案
微服务的四个核心问题:
1.服务很多,客户端如何访问服务端?负载均衡
2.这么多服务,服务之间如何通信呢?http,rpc
3.这么多服务,如何治理?服务注册与发现
4.服务挂了怎么办?熔断机制
解决方案:
1.SpringCloud netflix 一站式解决方案!(ps:SpringCloud:是生态!基于Spring boot就是来解决上面的四个问题。)
api网关:Zuul组件
通信:Feign,httpclient—-http通信方式,同步,阻塞
服务注册与发现:Eureka
熔断机制:Hystrix
但是2018年停止维护了!
2.apache Dubbo zookeeper 半自动,需要整合别人的!
API:没有,找第三方组件,或者自己实现
Dubbo:基于RPC的通信框架
zokeeper:动物园管理者
没有:借助Hystrix
Dubbo这个方案并不完善
3.SpringCloud alibaba 一站式解决方案!更简单
新概念:服务网格-server mesh
1.2 常见面试题
1.1.什么是微服务?
1.2.微服务之间是如何独立通讯的?
1.3.SpringCloud和Dubbo有哪些区别?
1.4.springBoot和SpringCloud,请你谈谈对他们的理解
1.5.什么是服务熔断?什么是服务降级?
1.6.微服务的优缺点分别是什么?说下你在项目开发中遇到的坑
1.7.你所知道的微服务技术栈有哪些?请列举一二
1.8.Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
2 微服务概述
2.1 什么是微服务?
通常而言,微服务架构是一种架构模式或者架构风格,它提倡将单一的程序划分成一组小的服务。每个服务运行在其独立的自己的进程内。
服务之间相互协调,相互配置。服务之间采用轻量级的通信机制互相沟通,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中。
另外,尽量避免统一的,集中式的服务管理机制,(所以有服务注册与发现)。
对具体的一个服务而言,应根据业务上下文,选择合适的语言,工具对其进行构建(一般使用maven),可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言啦编写服务,也可以使用不同的数据存储。
微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事情。
2.2 微服务与微服务架构
微服务:强调的服务的大小,是解决某个问题/提供对应服务的一个应用,狭义看,可以是idea中一个个微服务工程,或者moudel
微服务架构:一种新的架构形式,提倡将单一应用程序划分成一组小的服务。
2.3 微服务的优缺点
优点:
1)每个服务都比较小,开发简单,代码容易理解,可以只关注解决某方面业务问题。
2)服务是松耦合的,开发和部署都是独立的
3)可以使用不同语言开发,独立的数据库
4)易于和第三方集成,比如jenkis
缺点:
1)要处理分布式系统的复杂性
2)服务通信成本,数据一致性
3)系统集成测试,,性能监控,,,
2.4微服务技术栈有哪些?
服务开发:springboot,spring,springmvc
服务配置与管理:netflix公司的archaius,阿里的diamond等
服务注册与发现:Eureka、consul、zookeeper等
服务调用:Rest、RPC、gRPC
服务熔断:Hystrix、Envoy等
负载均衡:Ribbon、Nginx等
服务接口调用(客户端调用服务的简化工具):Feign等
消息队列:kafka、Rabbimq,activeMQ等
服务配置中心管理:SpringCloudConfig、Chef等
服务路由(API网关):Zuul等
服务监控:
服务部署:Docker
。。。
2.5 为什么选择SpringCloud作为微服务架构
1)一站式,完整的服务架构;
2)整体方案成熟;
3)学习简单
3 SpringCloud入门概述
3.1 SpringCloud是什么?
1)SpringCloud基于springboot提供了一套微服务解决方案。包括服务注册与发现,配置中心,全链路监控,服务网关、负载均衡,熔断器等组件。
2)简化了分布式系统开发,提供了快速构建分布式系统的工具,包括配置管理,服务发现,断路器,路由微代理,事件总线,全局锁,角色竞选,分布式会话等,都可以用sprngboot的风格一键启动和部署。
3)没有重复造轮子,通过springboot风格进行再封装,所以简单易懂,易于部署和易于维护的分布式系统开发工具包。
3.2 SpringCloud和SpringBoot的关系
1)SringBoot是用来开发单个微服务,sprngCloud是关注全局的协调治理微服务的框架,它将SringBoot开发的一个个单个微服务整合并管理起来,为各个微服务之间听歌,配置管理,服务发现,断路器,路由,微代理,分布式会话等。
2)SringBoot可以离开SpringCloud独立使用,开发项目,但是SpringCloud离不开SringBoot,属于依赖关系。
3.3 Dubbo和SpringCloud技术选型
分布式+服务治理Dubbo
目前成熟的互联网架构:应用服务化拆分+消息中间件
最大区别:
1)SpringCloud抛弃了Dubbo的rpc通信,采用基于http的rest方式
后者牺牲了服务调用的性能,但是比rpc更为灵活,服务提供方和调用方只依靠一纸契约,不存在代码级别强依赖。
2)品牌机和组装机的区别:SpringCloud能够与springboot等其他sprng项目完美融合
Dubbo构建等微服务架构自由度很高。SpringCloud更可靠一点
3)社区支持和更新力度
Dubbo停止了5年左右的更新,虽然2017重启了,但是技术发展新需求不满足
总结:解决问题领域不一样:Dubbo的定位是一款RPC框架,SpringCloud的目标是微服务架构下的一站式解决方案
3.4 SpringCloud可以干什么?
分布式/版本控制
服务注册与发现
参考链接:
Spring Cloud Netflix文档:
●https://SpringCloud.cc/spring-cloud-netflix.html
●中文API文档: https://SpringCloud.cc/spring-cloud-dalston.html
●SpringCloud中国社区http://SpringCloud.cn/
●SpringCloud中文网:https://SpringCloud.cc
4 SpringCloud使用
4.1SpringCloud版本选择
springboot 2.1.4
SpringCloud G版本 19年的版本 兼容springboot2.0
4.2 使用
1.1)创建maven项目 SpringCloud 父项目所以删除src
2)导入包
打包方式 :<package>pom
定义版本号:<properties>
<Lombok.version> 4.1.2
总的依赖管理,子类导入直接就是父类的版本:<dependencyManagemt>
依赖:<deendencies><dependency>
<scope >import 导入进来
导入这些依赖:
spring-cloud-dependencies Greenwich.SRI
spring-boot-dependencies 2.1.4
mysql-contector-java 5.1.47
druid 1.1.0
mybatis-spring-boot-starter 1.3.2
junit
lombok ${lombok.version}
log4j
<build>
打包插件和<resource>
3)new module :springcloud-api
pom:当前的module自己需要的依赖,人工父依赖已经配置了版本,这里就不用写了。
4)创建库DB01
表dept deptno dname db_source
insert into dept(dname,source) values(‘开发部’,DATABASE())
5)创建实体类Dept 并序列化
6)创建module springcloud-provider-dept-8001
先导入:需要配置apimodule,导入上面创建的api
junit mysql-contector druid logback-core mybatis-spring-boot-starter
spring-boot-test spring—boot-starter-web springb-boot-starter-jetty
spring-bot-starter-devtools(热部署工具)
然后配置yml
server:port:8001
mybatis:
type-aliases-package:com.kuang.springcloud.pojo
config-location:classpath:mybatis/mybatis-cnfig.xm
mapper-location:classpath:mybatis/mapper/*.xml
#spring的配置
spring:
application:
name:SpringCloud-provider-dept
datasource:
type:DruidDataSourcce
driver-class-name:Driver
url:jdbc:mysql://localhost:3306/db01?ueUnicode=true&characterEncoding=utf-8
username:root
password:123456
然后mybatis-config.xml
可以配置二级缓存
然后comkuang.springcloud.dao
创建DeptDao和Mapper和service和servieimpl
然后DeptController:提供Restful服务 @GetMappign @PostMapping
增删改查
get接口,参数id
7)新建module springcloud-consumer-dept-80
然后导包:
springcloud-api spring-boot-starter-web spring-boot-devtools
然后配置yml:
server:port:80
然后创建com.kuang.sprngcloud
controller。DeptConsumerController
//理解:消费者不应该有service层?
Spring提供的RestTemplate :提供多种便捷访问远程http服务的方法,简单的restful服务模版,供我们直接调用就可以了!
注册到spring中
创建配置类:config.ConfigBean
注入@Bean RestTemplate
新增controller
@Autowired
private RestTemplate restTemplate;
resTemlate.getForObject("http://localhoust:8001"+"/dept/get/",id,Dept.class)
就可以请求了?
同理resTemplate。postForObject(""+"",id,Dept.class)
只需要地址就可以请求了!
5 Eureka服务注册与发现
5.1 什么是Eureka?
遵循AP原则
基于Rest的服务
服务提供者在注册中心配置地址,消费者在注册中心获取注册中心的数据。服务提供者和消费者远程调用。
5.2 原理讲解
1)Eureka采用C-S架构,使用EurekaServer作为服务注册功能的服务器,他是服务注册中心
而系统中的其他微服务通过Rureka客户端去连接RurekaServer并维持心跳连接。这样系统中的维护人员就可以通过Rureka来监控系统中各个微服务是否正常运行,SpringCloud只的一些其他模块(比如Zuul)就可以通过rurekaserver来发现系统中的其他微服务,并执行相关的逻辑。
2)两个组件:Eureka Server和Eureka Client
Eureka Server提供服务注册服务,各个节点启动后,会在EurekaServer中进行注册。这样Eureka Server中的服务注册表将会得到所有可用服务节点的信息,我们可以在界面中直接看到
Eureka Client是一个java客户端,用于监护aEurekaServer的交互,客户端同时也具备一个内置的,使用轮询负载算法的负载均器。在应用启动后,将会向EurekaServer发送心跳(默认周期为30秒)。如果EurekaServer在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表把这个服务节点移除掉(默认周期90秒)
3)三大角色:
EurekaServer:提供服务注册与发现。
Service Provider:服务提供者
Service Consumer:服务消费者
5.3 使用
Eureka服务端是要我们自己写的哦,ZooKeeper的服务端是下载的。
1.创建spring-cloud-eureka-7001
1)导入依赖:spring-cloud-stater-eureka-server
2)编写配置文件:
server:port:7001
eureka:
instance:
hostname:localhost#Eureka服务端的实例名称
client:
register-with-eureka:false #表示是否向rureka注册中心注册自己
fetch-registry:false #如果为false则表示自己为注册中心。
service-url:#监控页面
defaultZone:http://${Eureka.instance.hostname]:${server.port}/eureka/
3)开启这个功能编写启动类@EnableEurekaServer//可以接受别人注册进来
4)配置类 不用配置
5)然后就可以访问监控页面啦(上面配置的)
2.spring-cloud-provider-8001
1)导入依赖:sring-cloud-starter-eureka
2)配置文件
把服务注册进去
eureka:client:service-url:defaultZone:http://localhost:7001/eureka/
instance:instance-id:springcloud-provider-8001
#修改Eureka上的默认描述信息
3)@EnableEurekaClient //在服务启动后自动注册到Eureka中!
4)导入依赖spring-boot-starter-actuator
完善监控信息:
info:
app:name:kuangshen-springcloud
company.name:blog.kuangshen.com
然后在EurekaServer注册表可以点这个服务进去就展示这些服务信息啦。
5.4 Eureka的自我保护机制
1)好死不如赖活着
一句话总结:某时刻某一个微服务不可以用了,Eureka不会立即清理,依旧会对该微服务进行保存。
比如万一网络分区故障了,微服务和Eureka之间不能正常通信了,但是微服务其实是健康的,此时本不应该注销这个微服务。
2)当Eureka短时间内丢失多个客户端时(可能就是网络分区故障),这时候进入自我保护模式,不再删除注册表中的数据(也就是不会注销任何微服务),当网络故障恢复后,该EurekaServer会自动退出自我保护机制。
3)自我保护模式是一种对网络异常的安全保护措施。宁可同时保留所有微服务(健康的和不健康的),也不盲目注销任何健康的微服务,使用自我保护模式,可以让Eureka集群更加健壮和稳定。
4)可以使用Eureka-server-enable-salf-preservation=false可以禁用(不推荐!)
5.5 DiscoverClient:注册进来的微服务,获取一些消息
开启:@EnableDiscoverClient
@Autwired
private DiscoverClient client;
1)client.getServices();//获取微服务列表清单:
2)client.getInstance(serviceId)//得到具体的微服务信息,通过微服务id,applicaionname
instance.getHost;instance.getPort等
5.6 Eureka集群:万一一个崩了所有服务都没了,所以集群。
创建module springcloud-eureka-7002
springcloud-eureka-7003
配置文件:
1)EurekaServer
单机:defaultZone:是配置自己的
集群(关联):
eureka-7001的
defaultZone:
http://Eureka7002.com7002/eureka,http://Eureka7003.com7003/eureka
同理eureka-7002的:关联7001和7003的
eureka-7003的:关联7001和7002的
2)provider-dept-8001的配置文件
要注册到三个Eureka中
defaultZone:http:localhost:7001/eureka,http:localhost:7002/eureka,http:localhost:7003/eureka
3)然后访问三个中哪个Eureka注册中心,都能访问到关联的其他Eureka,随便一个崩了,其他的都还可以用!
5.7 Eureka CAP原则及对比ZooKeeper
CAP:强一致性、可用性、分区容错性
CAP的三进二:CA,AP,CP
一个分布式系统最多只能实现两个。
ZooKeeper保证的是CP:可以容忍注册中心返回的是几分钟以前的注册信息,但是不能结束服务直接down掉不可用,也就是说,服务注册功能对可用性的要求要高于一致性。当master节点down掉,剩余节点会重新选取leader,选举时间可能比较长,而且选举期间整个zk集群都是不可用的,这时候导致选举期间注册服务瘫痪。
Eureka保证的是AP,各个节点平等,几个节点挂掉不会影响正常节点的工作,只是查到的数据可能不是最新的。
而且还有自我保护机制:
如果15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端和注册中心出现了故障,会出现以下几种情况:
1)不再从注册列表一处因为长时间没有收到心跳而应该过期的服务。
2)仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点。当3)当网络稳定,新的注册信息会同步到其他节点。
因此Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。
6 Ribbon
6.1 Ribbon是什么?
实现一套客户端负载均衡工具
简单说:就是在配置文件中列出LoadBalancer(LB,负载均衡)后面所有的机器,Ribbon会自动地帮助你基于某种规则(轮询、随机)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
6.2 Ribbon能干嘛?
LB,即负载均衡,就是将用户的请求平摊的分配到多个服务商,从而达到系统的HA(高可用)
常见的负载均衡软件Nginx、Lvs
负载均衡简单分类:
集中式LB:比如Nginx:反向代理服务器。由该设施负责把访问请求通过某种策略转发至服务的提供方。
进程式LB:将LB逻辑集成到消费方,消费方从服务注册中心或获知有哪些地址可用,然后自己再从这些地址选择一个合适的服务器。
Ribbon就属于进程内LB,它只是一个类库,集成消费方进程,消费方通过它来获取到服务提供方的地址!
6.3 使用
consumer-dept-80:
1.导入依赖:spring-cloud-starter-ribbon、spring-cloud-starter-eureka
2.配置文件:
eureka:
client:
regiter-with-Eureka:false#不向Eureka注册自己
service-url:
defaultZone:http://eureka7001.com:7001/eureka,http://eureka7002.com:7002,http://eureka7003.com:7003,
3.开启: @EnableEurekaClient
4.配置负载均衡实现RestTemplate
@Bean
@LoadBalanced //这个注解!
public RestTemplate getRestTemplate(){}
然后通过restRemplate 访问的url换成服务名来访问 "SPRINGCLO-UDPROVIDER-DEPT"
5.Ribbon和Eureka整合以后,客户端可以直接调用,不用关心ip地址和端口号
6.模拟测试负载均衡:
增加两个DB:db02,db03
增加两个provider:8002,8003
#三个服务名称(apring:application:name:SpringCloud-provider-dept)是一致的,客户端是通过服务名称访问的。在Eureka的服务id不一样。
启动三个provider,Eureka上这个服务provider会有三个服务注册运行中。
然后通过客户端访问:会轮询(Ribbon默认的策略)请求三个服务。
7.自定义负载均衡算法:
1)IRule接口
AbstractLoadBalanceRule 抽象类
具体实现类:
RoundRobinRule 轮询
RandomRule 随机
2)注入哪个策略就会用哪个策略。
@Bean
public IRule myRule(){retuen new RandomRule()}
3)我们自己可以写一个策略需要实现AbstractLoadBalanceRule类。
新建myrule.KuangRule.class,不能放在application同级目录下(官网说的!),不能被扫描到。(这样的话就是针对某个服务的策略,要不然就是全局的?)
@RibbonClient(name="SpringCloud-PROVIDER-DEPT",configuration=KuangRule.class)//在微服务启动的时候就能去加载我们自定义Ribbon类。
7 Feign
7.1 什么是Feign?
负载均衡
Feign是声明式的web service客户端,类似于controller调用service,SpringCloud集成了Ribbon和rureka,可在使用Feign时提供负载均衡的http客户端。
Feign主要是社区,习惯面向接口编程,调用微服务访问的两种方法:
1.微服务名字【Ribbon】
2.接口和注解【Feign】
7.2 Feign能干什么?
Feign旨在使编写java http客户端变得更容易。
我们只需要创建一个接口并使用注解的方式来配置它(类似于以前Dao接口上标注Mapper注解,现在是一个微服务接口上标注一个Feign注解即可)
Feign集成了Ribbon
7.3 使用
1.springccloud-api 模块
导入依赖 :spring-cloud-starter-feign
2)新建interface DeptClientService
使用注解注上@FeignClient(value="SpringCloud-PROVIDER-DEPT") //服务名
@Component
@GetMapping("/dept/get/${id}")
public Dept queryById(@PathVariable("id")Long id);
然后新建module sprngcloud-consumer-dept-feign
然后注入
@Autowired
private DeptClientService service;
然后就controller里面就可以直接调用了。
然后@EnableFeignClients(basePackages={com.kuang.SpringCloud})
@CompentScan("com.kuang.SpringCloud")
也支持负载均衡,也是向Eureka拿服务,相当于代替Ribbon的RestTemplate,只是调用简单了!
8 Hystrix
8.1什么是Hystrix?
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖会不可避免地调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整个服务失败,避免级联故障,以提高分布式系统的弹性。
"断路器"本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控,"向调用方返回一个服务预期的,可以 处理的备选响应(FallBack),而不是长时间的等待或者跑出调用方法无法处理的异常,这样就可以保证了服务调用方的线程不会被长时间不必要的占用 ",从而避免了故障在分布式系统中蔓延。乃至雪崩。
8.2 Hystrix能干嘛?
服务降级
服务熔断
服务限流
接近实时的监控
8.3 服务熔断是什么?
熔断机制是对应雪崩效应的一种微服务链路保护机制。
当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,今儿熔断该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现,Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制,熔断机制的注解是@HystrixCommand
8.4 使用
创建springcloud-provider-dept-hystrix-8001 服务端。
1.导入依赖:spring-cloud-strater-hystrix
2.添加对熔断的支持@EnableCircuitBreaker
3.//如果失败调用指定的方法
@HystrixCommand(fallbackmethd="hystrixGet")
@GetMapping("/dept/get/{id}")
public Dept get(Long id){
Dept dept=dptService。queryById(id);
if(dept==null){
}
}
public Dept hystrixGet(){
return new Dept(1L,"deptname","");
}
8.5 服务降级
consumer-dept-feign模块
1.写个类去实现FallbackFactory的create()方法
@FeignClient(value"SpringCloud_PROVIDER_DEPT",fallbackFactory="DeptClientServiceFallBackFactory.class")
2.配置文件
Feign:Hystrix:enabled:true
服务熔断:服务端-某个服务超市或者异常,引起熔断,直到服务恢复异常
服务降级:客户端,从整体的网站请求负载考虑,当某个服务熔断或者关闭之后,服务将不再被调用。此时在客户端,我们可以准备一个FallbackFactory,返回一个默认的值,比直接挂掉强。
8.6 服务监控:DashBoard
是集成在客户端的
1.新建springcloud-consumer-hystrix-dashboard
1.导入依赖spring-cloud-starter-hystrix
spring-cloud-starter-hystrix-dashboard
2.ps:(所有模块包名要一致)
开启:@EnableHystrixDashboard
要保证每个服务端都有spring-boot-starter-actuator依赖(完善监控信息的,要不然监控不到的)
访问http://localhost/9001/hystrix
2.服务端dept-8001:
增加一个servlet
@Bean
public ServletRegistrationBean hystrixMerticsStramServlet(){
ServletRegistrationBean b=new ServletRegitraionBean(new HystrixMetricsStreamServlet());
b.addUrlMappring("/actuator/hystrix.stram");
}
3.然后访问:http:localhost/9001/hstrix/
在监控页面把http://localhost:/8001/actuatorhystrix/stream录入。
以及每间隔多少ms录进去,title录进去,然后点击monitor stream按钮就可以监控啦!每次访问监控都会变化。会监控请求信息:
一圈:颜色 大小 记录请求压力
成功数、熔断数,错误百分比,异常数等。
9 Zuul路由网关
9.1 什么是Zuul?
Zuul包含了请求的路由和过滤两个最主要的功能:
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。而过滤功能负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
提供:路由+代理+过滤三大功能!
9.2 使用
创建springCloud-zuul-9527
1.导入依赖:spring-cloud-strarter-zuul
2.配置yml
server:port:9527
spring:application:name:spring-cloud-zuul
eureka:client-service-url:defaultZone:http://localhost/7001/Eureka,,,#注册的Eureka地址
instance:instance-id:zuuul9427.com
prefer-ip-address:true #隐藏ip
info:app.name:kuang-spring-cloud
company.name:blog.kuang.com
3.开启:@EnableZuulProxy
4.启动Eureka集群,启动8001,启动9527
5.通过Zuul服务端口+服务端的服务名就可以访问服务端的请求了:
http:localhoust:9537/spring-cloud-provider-dept/dept/get
6.如果 想隐藏真实服务名:换一个名访问
加配置:
zuul :routes:mydept.serverId:SpringCloud-provider-dept
mydept.path:/mydept/**
7.此时通过真实服务名也还是可以访问的,如果还想要不能通过真实服务名访问,再加配置
ignored-services:SpringCloud-provider-dept
ignored-services:*#隐藏全部的
prefix:/kuang #设置公共的前缀的
10 SpringCloud Config分布式配置
10.1 SpringCloud Config是什么?
为微服务架构中的微服务提供集中化的外部配置支持。
SpringCloud Config分为服务端和客户端两部分。
服务端也称为分布式配置中心,是一个独立的微服务应用。
10.2 SpringCloud Config分布式配置中心能干嘛?
- 集中管理配置文件
- 不同环境,不同配置
- 运行期间动态调整配置
- 将配置信息以Rest接口的形式暴露
10.3 使用
1.码云托管代码,创建仓库spring-cloud-config。
git 设置name和email
c/user/administrator/.ssh
设置SSH公钥
clone下来。
设置yml配置文件
spring:profiles:active:dev
spring:profiles:active:test
2.创建SpringCloud-config-server-3344
1)导入依赖spring-boot-strarter-web,epring-sloud-starter-Eureka,spring-cloud-config-server
2)配置文件
server:port:3344
spring:application:name:SpringCloud-config-server
#连接远程仓库
spring:cloud:config:server:git:uri:htts://gitee.com/kuangstudy/springcloud-config.git #https的不是git
3)开启:@EnableConfigServer
4)通过我config-server,我们可以连接到git访问其中的资源以及配置。
http://localhost:3344/master/application-dev.yml
3.config-server配置文件里把config-server注册到Eureka
4.新建springcloud-config-client-3355
1)导入依赖spring-cloud-starter-config
2)bootstrap.xml:系统级的配置
spring:cloud:config:uri:
http://locahost:3344
name:config-client #需要从git上读取的资源名称,不需要后缀
profile:dev #访问的环境
label:master #获取的分支
aplication.yml:用户级别的配置
3)@Value("{$spring.application.nam}")
private String applicationName;
就可以获取到啦
4)实战:把之前创建的yml配置文件都整到git上。
创建springcloud-config-eureka-7001
1)导入依赖
2)bootstrap.yml配置文件,从3344config-server获取
spring:cloud:config:name:config-eureka
label:master
profile:dev
uri:http://localhost:3344
pplication.yml配置文件
spring:application:name:springcloud-config-eureka-7001
11 SpringCloud总结
知识点
看看面试题
微服务和微服务架构
基础工程:RestTemplate
Eureka-集群、对比Zookeeper
Ribbon-IRule
Feign-接口,社区要求,更加面向接口编程
Hystrix-熔断、降级、dashboard
Zuul
SpringCloud Config:C-S-GIT
使用三步骤:
1.导入依赖
2。编写配置
3.@Enablexxx
展望未来:
框架源码
设计模式
新知识探索
java新特性
Netty/MyCat/Http
JVM