Spring Cloud之Eureka註冊中心
在前後端分離架構中,服務層被拆分成了很多的微服務,微服務的資訊如何管理?Spring Cloud中提供服務註冊中 心來管理微服務資訊。
為什麼 要用註冊中心?
1、微服務數量眾多,要進行遠端呼叫就需要知道服務端的ip地址和埠,註冊中心幫助我們管理這些服務的ip和 埠。
2、微服務會實時上報自己的狀態,註冊中心統一管理這些微服務的狀態,將存在問題的服務踢出服務列表,客戶 端獲取到可用的服務進行呼叫。
Spring Cloud Eureka 是對Netflix公司的Eureka的二次封裝,它實現了服務治理的功能,Spring Cloud Eureka提 供服務端與客戶端,服務端即是Eureka服務註冊中心,客戶端完成微服務向Eureka服務的註冊與發現。服務端和 客戶端均採用Java語言編寫。
1、Eureka Server是服務端,負責管理各各微服務結點的資訊和狀態。
2、在微服務上部署Eureka Client程式,遠端訪問Eureka Server將自己註冊在Eureka Server。
3、微服務需要呼叫另一個微服務時從Eureka Server中獲取服務呼叫地址,進行遠端呼叫。
建立Eureka工程
加入依賴
<dependencies> <!‐‐ 匯入Eureka服務的依賴 ‐‐> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring‐cloud‐starter‐netflix‐eureka‐server</artifactId> </dependency> </dependencies>
啟動類
@EnableEurekaServer//標識這是一個Eureka服務 @SpringBootApplication public class GovernCenterApplication { public static void main(String[] args) { SpringApplication.run(GovernCenterApplication.class, args); } }
在啟動類上新增@EnableEurekaServer註解,來標識此服務為Eureka服務
在application.yml的配置內容如下:
server: port: 50101 #服務埠 spring: application: name: xc‐govern‐center #指定服務名 eureka: client: registerWithEureka: false #服務註冊,是否將自己註冊到Eureka服務中 fetchRegistry: false #服務發現,是否從Eureka中獲取註冊資訊 serviceUrl: #Eureka客戶端與Eureka服務端的互動地址,高可用狀態配置對方的地址,單機狀態配置自己(如果不配置則預設本機8761埠) defaultZone: http://localhost:50101/eureka/ server: enable‐self‐preservation: false #是否開啟自我保護模式 eviction‐interval‐timer‐in‐ms: 60000 #服務登錄檔清理間隔(單位毫秒,預設是60*1000)
registerWithEureka:被其它服務呼叫時需向Eureka註冊
fetchRegistry:需要從Eureka中查詢要呼叫的目標服務時需要設定為true
serviceUrl.defaultZone 配置上報Eureka服務地址高可用狀態配置對方的地址,單機狀態配置自己
enable-self-preservation:自保護設定。
eviction-interval-timer-in-ms:清理失效結點的間隔,在這個時間段內如果沒有收到該結點的上報則將結點從服務 列表中剔除。
啟動Eureka Server
啟動Eureka Server,瀏覽50101埠。
報錯:出現紅色提示資訊: THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
意思:自我保護模式被關閉。在網路或其他問題的情況下可能不會保護例項失效。
Eureka Server有一種自我保護模式,當微服務不再向Eureka Server上報狀態,Eureka Server會從服務列表將此 服務刪除,如果出現網路異常情況(微服務正常),此時Eureka server進入自保護模式,不再將微服務從服務列 表刪除。
在開發階段建議關閉自保護模式。
二、將服務註冊到eureka中
2.1新增依賴:
<!‐‐ 匯入Eureka客戶端的依賴 ‐‐> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring‐cloud‐starter‐netflix‐eureka‐client</artifactId> </dependency>
2.2在application.yml配置:
eureka:
client:
registerWithEureka: true #服務註冊開關
fetchRegistry: true #服務發現開關
serviceUrl: #Eureka客戶端與Eureka服務端進行互動的地址,多箇中間用逗號分隔
defaultZone: ${EUREKA_SERVER:http://localhost:50101/eureka/}
instance:
prefer‐ip‐address: true #將自己的ip地址註冊到Eureka服務中
ip‐address: ${IP_ADDRESS:127.0.0.1}
instance‐id: ${spring.application.name}:${server.port} #指定例項id
2.3在啟動類上添加註解:
在啟動類上添加註解 @EnableDiscoveryClient ,表示它是一個Eureka的客戶端.
完。。。