SpringCloud原始碼閱讀0-SpringCloud必備知識
在開始原始碼閱讀前,我覺得有必要先講講springcloud的體系。
SpringCloud 是一系列微服務工具專案的集合。這個集合包含如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等工具。
這些專案地址在:github.com/spring-clou… 包含:
- Spring Cloud Commons
- SpringCloud Netflix
- SpringCloud Stream
- SpringCloud Config .....
本文著重講講兩個專案:
Spring Cloud commons
此專案非常重要,因為他包含兩個重要的子模組:
1.Spring Cloud 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作為一個公共專案的目的。
Spring Cloud Netflix
Netflix公司開源一套分散式服務框架,Netflix OSS。專案地址github.com/Netflix
Spring Cloud Netflix 專案對其進行了二次封裝,使其更加適應springcloud體系。 Spring Cloud Netflix下包含了與Netflix OSS對應 子專案
- SpringCloud-Eureka -- Netflix Eureka
- SpringCloud-Ribbon -- Netflix Ribbon
- SpringCloud-Hystrix -- Netflix Hystrix
- ...
當我們一想到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 英文地址
Spring Cloud xxx
springcloud 集合下還有很多專案,專案地址在:github.com/spring-clou…
總結:
理解其中的一些關係後,後面開始對其中一些關鍵元件進行原始碼閱讀。