在开始源码阅读前,我以为有必要先讲讲springcloud的体系。html
SpringCloud 是一系列微服务工具项目的集合。这个集合包含如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等工具。git
这些项目地址在:github.com/spring-clou… 包含:github
本文着重讲讲两个项目:spring
此项目很是重要,由于他包含两个重要的子模块:负载均衡
1.Spring Cloud Context:为项目提供:引导上下文,加密,刷新范围和环境端点等功能。SpringCloud在构建上下文 (即ApplicationContext实例)时,采用了Spring父子容器的设计,会在 SpringBoot构建的容器(后面称之为应用容器)之上建立一父容器 Bootstrap Application Context 。框架
2.Spring Cloud Commons: 看其名字也能够看出他是一个通用功能的项目,会被其余项目引入。分布式
主要对微服务中的服务注册与发现、负载均衡、熔断器等功能提供一个抽象层代码,这个抽象层与具体的实现无关。这样这些功能具体的实现上能够采用不一样的技术去实现,并能够作到在使用时灵活的更换。微服务
列如:DiscoveryClient
的使用,咱们能够选择使用Spring Cloud Netflix Eureka,Spring Cloud Consul发现和Spring Cloud Zookeeper发现
。工具
当咱们使用@EnableDiscoveryClient
来引入DiscoveryClient
时,具体引入哪一种DiscoveryClient
,会根据你具体引入哪一个项目有关。若是咱们用了Spring Cloud Netflix Eureka
。那就会引入Spring Cloud Netflix Eureka
的DiscoveryClient
。加密
当咱们用用@EnableEurekaClient
来引入DiscoveryClient
,就是明确只能使用Spring Cloud Netflix Eureka
的DiscoveryClient
。
这也是
@EnableDiscoveryClient
与@EnableEurekaClient
的区别。
由此咱们能看出Spring Cloud Commons做为一个公共项目的目的。
Netflix公司开源一套分布式服务框架,Netflix OSS。项目地址github.com/Netflix
Spring Cloud Netflix 项目对其进行了二次封装,使其更加适应springcloud体系。 Spring Cloud Netflix下包含了与Netflix OSS对应 子项目
当咱们一想到springcloud ,就是Eureka,Ribbon。我认为这样是不对的,Eureka,Ribbon 只是做为Springcloud体系下Spring Cloud Netflix项目的子项目存在,他们只是微服务组件中的一种实现。
由于咱们经常使用Spring Cloud Netflix 项目下的这些实现,客观的认为Eureka,Ribbon 就是springcloud。
所以在阅读源码前,理清这些关系springcloud,Spring Cloud Netflix ,Netflix OSS
是很是有必要的。
最重要的: 当咱们阅读SpringCloud-Eureka,SpringCloud-Ribbon
等源码时,参考Netflix OSS
的wiki文档,对于咱们理解他们颇有帮助。
springcloud文档地址:
Netflix Eureka 英文地址
springcloud 集合下还有不少项目,项目地址在:github.com/spring-clou…
理解其中的一些关系后,后面开始对其中一些关键组件进行源码阅读。