Spring Cloud— 五、註冊中心Eureka

weixin_34320159發表於2018-11-16

5.1、為Eureka新增使用者認證

在前面的例項中,我們可以看到我們需要登陸即可訪問到Eureka服務,這樣其實是不安全的。

接下來,我們為Eureka新增使用者認證。

第一步,為springcloud-demo-eureka新增安全認證依賴:

<!--安全認證-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

第二步,增加application.properties配置檔案:


9205543-da48cd8fcce4dfc8.png
application.properties.png

第三步,重新啟動Eureka服務進行測試:


9205543-c245db22da91b0d8.png
測試結果.png

輸入正確的使用者名稱密碼即可登陸。
這是,服務提供者註冊到Eureka時會報錯,所以需要在服務註冊時也需要設定使用者名稱和密碼。

5.2服務註冊時設定賬戶資訊

服務註冊到有認證需求的註冊中心時,需要設定如下資訊:
http://User:Password@127.0.0.1:8888/eureka/

9205543-2c1c36861406cef4.png
application.properties.png

重新啟動測試,可以看到已經註冊到了Eureka服務註冊中心。

5.3、Eureka的自我保護模式

如圖,當前Eureka進入了自我保護模式。


9205543-a00a9aef449c3cd4.png
自我保護模式.png

預設情況下,如果Eureka Server在一定時間內沒有接受到某個微服務例項的心跳,Eureka Server將會登出該例項(預設90秒)。但是當網路分割槽故障發生時,微服務與Eureka Server之間無法正常通訊,以上行為可能變得非常危險了——因為微服務本身其實是健康得,此時本不應該登出這個微服務。
Eureka通過“自我保護模式”來解決這個問題——當Eureka Server節點在短時間內丟失過多客戶端時(可能發生了網路分割槽故障),那麼這個節點就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務登錄檔的資訊,不再刪除服務登錄檔中的資料(也就是不會登出任務微服務)。當網路故障恢復後,該Eureka Server節點會自動退出自我保護模式。

綜上,自我保護模式是一種應對網路異常的安全保護措施。它的架構哲學是寧可同時保留所有的微服務(健康的微服務和不健康的微服務都會保留),也不盲目登出任何健康的微服務。使用自我保護模式,可以讓Eureka叢集更加的健壯、穩定。

所以,一般進入自我保護模式,無需處理。如果,需要禁用自我保護模式,只需要在application配置檔案中新增配置即可
9205543-f353b5ed539b5550.png
application.properties.png

重新啟動服務檢視效果:


9205543-e96bd4e693dacac0.png
效果.png

提示,如果禁用自我保護模式,在網路通訊故障下會出現問題。

5.4、Eureka的高可用

前面得測試,我們會發現,Eureka服務是一個單點服務,在生產環境就會出現單點故障,為了確保Eureka服務得高可用,我需要搭建Eureka服務的叢集。

搭建Eureka叢集非常簡單,只要啟動多個Eureka服務並且讓這些服務之間彼此進行註冊即可實現。

第一步,修改springcloud-demo-eureka的application.properties檔案:
9205543-1aabfd1fe5949711.png
application.properties.png

第二步:修改配置檔案,再啟用一個Eureka服務,進行啟動測試:
9205543-40a87cef1fa662a8.png
application.properties.png

測試結果:
9205543-f3be4d131cb6f7a8.png
測試結果.png
9205543-b11b923d9df882ee.png
測試結果2.png

可以看到,2個Eureka服務進行了彼此註冊。

說明:啟動兩個spring boot專案第一個可以用ieda啟動,第二個可以用命令mvn spring-boot:run,當然還有其他的很多方式。

5.5、將服務註冊到Eureka叢集

服務註冊到Eureka叢集時,可以指定多個,也可以指定一個Eureka服務(因為Eureka服務叢集間彼此互聯)。

修改springcloud-demo-item的application配置檔案:

 #Eureka服務端與Eureka客戶端互動地址
eureka.client.serviceUrl.defaultZone=http://zuo:123456@127.0.0.1:8888/eureka/,http://zuo:123456@127.0.0.1:9999/eureka/

重啟,測試:
9205543-69370f9d0b5ca3af.png
結果1.png
9205543-771dcdd8afafa05e.png
結果2.png

可以通過停止Eureka服務進行測試,結果會發現叢集是高可用。

5.6、指定例項的IP地址與例項ID

在服務的提供者配置檔案中可以指定ip地址,如下:

#指定此例項ip
eureka.instance.ip-address=127.0.0.1
#指定此例項ID
eureka.instance.instance-id=${spring.application.name}:${server.port}

Spring Cloud—一、微服務架構
Spring Cloud—二、Spring Cloud簡介
Spring Cloud—三、使用Spring Cloud實現微服務
Spring Cloud—四、Spring Cloud快速入門
Spring Cloud—五、註冊中心Eureka
Spring Cloud—六、使用Ribbon實現負載均衡
Spring Cloud—七、容錯保護:Hystrix
Spring Cloud—八、使用Feign實現宣告式的Rest呼叫
Spring Cloud—九、服務閘道器Spring Cloud Zuul
Spring Cloud—十、使用Spring Cloud Config統一管理微服務
Spring Cloud—十一、使用Spring Cloud Bus(訊息匯流排)實現自動更新

demo原始碼

相關文章