哈喽各位同學們大家好呀,今天是開發者學院中課程“Spring Cloud微服務架構設計與開發實戰”的章節三的“Spring Cloud微服務注冊與發現 ”幹貨總結~是一起學習新課程吧!
課程連結以及圖譜位址小編已經為大家指路了,搭配學習效果更佳👇
課程名稱:Spring Cloud微服務注冊與發現
課程位址:
https://developer.aliyun.com/learning/course/60/detail/1095圖譜名稱:Alibaba Java 技術圖譜
圖譜位址:
https://developer.aliyun.com/graph/javaSpring Cloud微服務注冊與發現
一、Spring Cloud服務注冊與發現
對于微服務業務需要先進行拆分,微服務執行個體部署數量不固定,可以彈性伸縮,與傳統架構不一樣,比較靠攏雲計算、雲原生。
(一)服務注冊與發現
解決大規模服務叢集的注冊和發現問題,主要為了友善用戶端調用。比如開發一個微服務是訂單服務,開始隻啟用一台伺服器,用戶端和用戶端直接調用微服務就可以了。但如果啟用兩台以上,用戶端直接寫多台服務的IP位址做輪巡是不行的,因為如果遇到類似雙11促銷場景,需要增加很多台服務,且是彈性不定數量增加,這時候最好有一種方案能夠解決這個問題,把用戶端和服務叢集結耦。
結耦裡面很重要的就是注冊中心,注冊中心可以幫助管理服務,當隻有一個、兩個服務的時候,用戶端可以直接和服務建立連接配接,當服務數量不固定,且伸縮範圍很大時,需要一個專門的機構幫助管理這些服務。
服務注冊與發現總結:
1. 大規模微服務叢集架構;
2. 許多服務執行個體;
3. 用戶端要找到自己調用的服務;
4. 新服務上線;
5. 某個服務當機,下線;
6. 實時監控服務的狀态。

(二)Spring Cloud Eureka服務發現與注冊
在微服務架構體系裡, Netflix公司貢獻了其中一個很重要的項目叫Eureka,主要解決服務注冊中心的問題。在大資料裡面,有同類型的産品ZooKeeper,Spring Cloud通過擴充元件也可以進行內建。
本節課主要講實戰開發,建立注冊中心以後,怎麼樣把微服務注冊進去,怎麼讓注冊中心管理服務。總結:
1. Netflix公司開源的項目,
2. Eureka:注冊中心,
3. 一個基于 REST 的中心服務,管理服務,
4. 實作雲端的服務注冊和服務發現。
5. Eureka元件組成:Eureka伺服器和Eureka用戶端;
6. 競争對手ZooKeeper;
7. 服務發現子產品(Eureka)是Netflix的核心;
8. Spring Cloud Netflix提供的簡化開發模闆;
9. 直接使用spring boot,建立項目;
10. 添加 @ EnableEurekaServer開發注冊服務中心。
(三)Spring Cloud 架構圖
下圖所示,是微服務架構圖,有注冊中心,用戶端微服務上線注冊,微服務執行個體數量是動态的,有可能是一台,也有可能是很多台,靈活彈性根據用戶端的壓力做彈性伸縮。
用戶端調用時不是直接找微服務,先找注冊中心,有哪些好的微服務,有哪些比對的,每次搜尋最新的報表,然後調用。用戶端也可以按照各種負載均衡的政策去調用,或者結合一些負責運作的算法靈活排程。
二、Eureka注冊中心開發實戰
(一)Spring Eureka注冊中心
1. 建立Eureka服務注冊中心項目;
2. 添加@ EnableEurekaServer;
3. 将spring boot應用改造成Eureka服務注冊中心;
4. application.properties增加配置;
5. 打包項目;
6. 運作;
7. 測試頁面;
8. 參考
https://spring.io/guides/gs/service-registration-and-discovery/。
(二)application.properties配置
• server.port=8761;
• eureka.client.register-with-eureka=false;
• eureka.client.fetch-registry=false;
• eureka.client.serviceUrl.defaultZone=http://localhost:${ser
ver.port}/eureka/;
• logging.level.com.netflix.eureka=OFF;
• logging.level.com.netflix.discovery=OFF;
(三)建立Spring Eureka服務項目
示範部分:
下圖所示,是正常運作界面。
這裡還沒有服務執行個體,下面示範開發微服務,再把微服務注冊進來。打開Eclipse開發工具,建立項目,插件裡面會有New Spring Sttarter Project模闆,Name 欄加入Eureka,下面直接配公司的域名就行,Group 欄輸入com.alibaba,點選下一步,如下圖所示:
Available欄輸入Eureka,加入注冊中心、服務端,為了開發調試再加入dev,用于加載動态調試工具,做動态調試服務。示範版本是2.4.1,再下一步:
下一步:
。
這裡面會生成項目,Maven會自動來去拉包,第一次拉包時間比較久,網絡好應該會快一點,把Maven倉庫改成阿裡或其他公司,國内應該有很多Maven倉庫鏡像。
先來改配置檔案,這裡關鍵是加注解,啟用EurekaServer, EurekaServer自動跟進配置,制作在某個端口上,包括注冊中心的界面,會提供注冊位址,在之前的例子上是提供Rest API, 供用戶端注冊。
第一步是,啟動@ EnableEurekaServer,使伺服器具備注冊中心的能力,這一步非常重要。
接下配一下配置檔案,配置檔案有幾個核心參數,程式名和端口,程式名輸入EurekaServer。端口不配的話就是預設的8080,因為官方例子是8761,我們也配置8761。還需要配置Eureka的注冊用戶端,如下圖所示:“http://localhost:8761/eureka”是注冊中心的位址,給用戶端注冊和查找用的。
接下來啟動程式,直接右鍵,選Run As ,有兩種啟動方式,1.jave Application,2.Spring Boot APP,兩種都可以啟動。
啟動成功之後,打開浏覽器,輸入http://localhost:8761回車,出現Eureka注冊中心的界面。裡面一有個服務執行個體,這個執行個體預設沒有關掉,自己可以往自己中心的注冊,正常并不需要,自己往自己中心的注冊實際是多餘的。在比較底的版本會顯示出錯。
可以配置關閉上面的服務執行個體,輸入“eureka.client.fetch-registry=false”,“eureka.client.register-with-eurka=falsr”。
重新加載後,打開eureka界面,可以看到,自己往自己中心注冊的執行個體就沒有了。
三、Eureka底層原理與源碼分析
(一)Netflix Eureka源碼
•Eureka 官方源碼;
•
https://github.com/Netflix/eureka;
•Spring Cloud Netflix 适配 Eureka 的代碼;
https://github.com/spring-cloud/spring-cloud-netflix(二)Eureka源碼分析
Eureka通信基于Http(s)協定的架構
1. 純正的 servlet 應用,需建構成war包部署;
2. 使用了 架構實作自身的 HTTP接口;
3. peer之間的同步與服務的注冊全部通過 HTTP 協定實作;
4. 定時任務(發送 、定時清理過期服務、節點同步等)通過 JDK 自帶的 Timer 實作;
5. 記憶體緩存使用Google的 包實作;
(三)服務執行個體Instance的狀态
1. Up;
2. Down;
3. Starting;
4. Out_Of_Service;
5. Unknown。