1. 程式人生 > 程式設計 >SpringCloud原始碼閱讀0-SpringCloud必備知識

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

:為專案提供:引導上下文,加密,重新整理範圍和環境端點等功能。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 EurekaDiscoveryClient

  • 當我們用用@EnableEurekaClient

    來引入DiscoveryClient,就是明確只能使用Spring Cloud Netflix EurekaDiscoveryClient

這也是@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…

總結:

理解其中的一些關係後,後面開始對其中一些關鍵元件進行原始碼閱讀。