spring cloud eureka:
eureka 用以服務發現、服務注冊,比較流行的有consul(后面再介紹)
eureka介紹:
eureka為netflix開源軟件,分為三個部分:
-
-
eureka服務:用以提供服務注冊、發現,已一個war的形式提供
-
eureka-server: 相對client端的服務端,為客戶端提供服務,通常情況下為一個集群
-
eureka-client:客戶端,通過向
eureka服務
發現注冊的可用的eureka-server,向后端發送請求
-
spring cloud eureka
分為兩部分
-
- @EnableEurekaClient: 該注解表明應用既作為eureka實例又為eureka client 可以發現注冊的服務
- @EnableEurekaServer: 該注解表明應用為eureka服務,有可以聯合多個服務作為集群,對外提供服務注冊以及發現功能
eureka搭建:
為了更好的演示服務端與客戶端,我采用兩個項目進行對比演示,先創建服務端在創建客戶端:(不要急,一步一步來)
服務端的創建:
第一步:創建spingboot2.0的項目,項目的pom文件如下:springcloud版本介紹
第二步:在啟動類上添加注解:@EnableEurekaServer 讓enreka生效
第三步:配置文件:application.yml
第四步:啟動測試:
注意:我把registerWithEureka改為true,再看一下:
到這,服務端的我基本介紹完了,注意點我也寫出來了,下面我們一起看客戶端:
客戶端的創建:
第一步:引入pom文件:
第二步:添加客戶端注解:@EnableEurekaClient
第三步:配置文件(重要,往那個注冊中心注冊服務就在這配置)
第四步:寫個接口測試一下:
第五步:啟動服務端和客戶端即可:
測試客戶端接口:
到這客戶端與服務端都演示完了
enreka遇到問題:
1>上面演示過程中我是先啟動服務端再啟動客戶端,演示正常,那如果我先啟動客戶端,在啟動服務端會怎樣呢? ----這是會報錯的,如下:
這是因為客戶端在啟動時就會向注冊服務端發送心跳,但是此時服務端沒啟動,所以會報找不到服務端,等到服務端啟動這個錯就會消失。
2>客戶端停止,會立即從服務端消失嗎?
不會的,在下一個心跳到達之前不會消失 默認是一分鍾
eureka.server.evictionIntervalTimerInMs=5000 但是可以在配置文件中設置,驅除下線的時間
3>紅字提醒
系統在三種情況下會出現紅色加粗的字體提示:
1.在配置上,自我保護機制關閉
RENEWALS ARE LESSER THAN THE THRESHOLD. THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
2.自我保護機制開啟了
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE
NOT BEING EXPIRED JUST TO BE SAFE.
3.在配置上,自我保護機制關閉了,但是一分鍾內的續約數沒有達到85% , 可能發生了網絡分區,會有如下提示
THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.