Eureka 原理與步驟
比擬場景:餐廳吃飯
1、先向收銀員(注冊中心)要個號牌(IP地址)。
2、飯菜到場就根據你號牌(IP地址)將飯菜端到你面前。
3、在整個就餐過程中,你隨時可以與收銀員進行互相溝通(監聽客戶端心跳)。
4、最后你吃完跑路了號牌回收(剔除服務器)。
原理: 與比擬場景序號對應理解。
1、服務提供方啟動后將注冊到 注冊中心,提供IP, 名字,什么服務等信息,
2、服務調用方作為客戶端注冊到注冊中心后,拉取注冊中心的服務列表,在通過負載均衡調用對應的服務提供方。
3、注冊中心可以建立集群,生成多台eureka,注冊中心為了監測各個服務的心跳,將在每30S 向所注冊的服務發起請求判斷
4、服務是否掛掉,如果掛掉90S后將會將服務從注冊中心剔除。
一個服務可以監測多台服務實例,從而可實現均衡負載。
SpringBoot和Spring Cloud之間的版本依賴比較嚴格:可查(json格式化) https://start.spring.io/actuator/info
配置步驟: 注意 以下的客戶端說的是作為注冊到注冊中心的微服務,他相對於注冊中心就是客戶端,注冊中心就是服務端
一、加依賴 以下指POM文件
<!--注冊中心:--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!--客戶端:--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
二、加注解 以下在啟動器上加注解
注冊中心 : @EnableEurekaServer
服務提供客戶端方:@EnableDiscoveryClient 此注解支持多種服務中心,如eureka,zk,等等,所以一般使用這個。
@EnableEurekaClient 只支持eureka所以用上一種
三、加配置 以下指application.yml配置文件
#注冊中心: server: port: 10086 spring: application: name: eureka-server eureka: client: register-with-eureka: false # 是否注冊自己的信息到EurekaServer,默認是true fetch-registry: false # 是否拉取其它服務的信息,默認是true service-url: defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka #注冊到當前地址中,實現eureka 集群后面描述 instance: lease-renewal-interval-in-seconds: 30 #每30S給其他服務發次請求,監測心跳 lease-expiration-duration-in-seconds: 90 #如果其他服務沒心跳,90S后剔除該服務 #客戶端: server: port: 8081 spring: application: name: user-server eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka registry-fetch-interval-seconds: 50 #客戶端拉取注冊中心的服務列表
關於Eureka 高可用的配置及講解:
為了使eureka高可用,掛掉后依然可以使用所以將配置多台eureka注冊中心實現集群。
實現原理:如果需配置3台注冊中心,那么應該是A注冊到B、C ,B注冊到C、A C注冊到A,B
這樣互相注冊即可實現集群配置。也就是上圖配置的多台地址
eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka registry-fetch-interval-seconds: 50 #客戶端拉取注冊中心的服務列表
關於Eureka 的自我保護機制與剔除服務機制:
剔除服務機制:當服務提供方(客戶端)注冊到Eureka后,每30S將會向Eureka發起一次請求表示自己有心跳
服務器正常,當90S都沒有發請求時候Eureka會認為服務器宕機了,則會在60S后統一清除所有宕機的服務器。
自我保護機制:當服務沒有按每30S按時發請求時,Eureka將會統計15分鍾內心跳的請求成功概率,如果低於85%
則可能服務提供方有延遲問題或者網絡故障,這樣會將服務提供方保護起來不會剔除。
eureka:
server:
enable-self-preservation: false # 關閉自我保護模式(缺省為打開)
eviction-interval-timer-in-ms: 1000 # 掃描失效服務的間隔時間(缺省為60*1000ms)
server:
enable-self-preservation: false # 關閉自我保護模式(缺省為打開)
eviction-interval-timer-in-ms: 1000 # 掃描失效服務的間隔時間(缺省為60*1000ms)
https://files.cnblogs.com/files/lanSeGeDiao/springCloud-demo.zip以上是springCloud的DEMO例子 請自行復制路徑到瀏覽器
相似的技術Nacos: https://nacos.io/zh-cn/docs/quick-start.html
轉: https://www.cnblogs.com/lanSeGeDiao/p/10801804.html