eureka註冊中心 一、基本概念 SpringCloud封裝 了Netflix公司的eureka作為自己微服務的註冊中心。這個註冊中心和dubbo中的zookeeper很相似,簡單來說,只要你可以將你的”微服務“模塊註冊到註冊中心,就可以供其他服務調用,一般來說,只有provider會註冊到eur ...
eureka註冊中心
一、基本概念
SpringCloud封裝 了Netflix公司的eureka作為自己微服務的註冊中心。這個註冊中心和dubbo中的zookeeper很相似,簡單來說,只要你可以將你的”微服務“模塊註冊到註冊中心,就可以供其他服務調用,一般來說,只有provider會註冊到eureka,consumer也可以註冊,但是並不建議這麼做。
eureka的架構圖如下:
二、在SpringCloud項目中使用eureka
- 要想使用SpringCloud的子模塊,一般分為兩步:
- 引入相關的maven依賴
- 然後在配置類上加上@EnableXXX註解
1. 創建一個新的Maven的Module項目,用來開啟eureka
為了讓小伙伴們更好地學習,我將上一次的項目複製了一份(見Github項目代碼)
- pom.xml中添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<!--這個是服務端的依賴-->
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
- 創建啟動類,併在啟動類上加上@EnableEurekaServer註解
@SpringBootApplication
@EnableEurekaServer
public class EurekaRegistApp_7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaRegistApp_7001.class,args);
}
}
- 添加application.yml配置文件如下:
server:
port: 7001
eureka:
instance:
hostname: localhost #eureka服務端的實例名稱
client:
register-with-eureka: false #false表示不向註冊中心註冊自己。
fetch-registry: false #false表示自己端就是註冊中心,我的職責就是維護服務實例,並不需要去檢索服務
service-url:
# 這兩個變數就是上邊定義過的
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #設置與Eureka Server交互的地址查詢服務和註冊服務都需要依賴這個地址。
- 然後啟動這個項目,就輸入訪問地址
http://localhost:7001/
,就可以查看eureka註冊中心了
當有服務註冊到這裡時,就會在上圖中出現。
2. 將服務提供者註冊進eureka
- 將eureka的依賴加入到pom.xml中
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
- 修改provider項目的application.yml
server:
port: 8001
spring:
application:
# 這個應用的名稱,用來註冊在註冊中心的名稱
name: demo2-provider
eureka:
client: #客戶端註冊進eureka服務列表內
service-url:
# 這個地址是在eureka的application.yml中定義過的
defaultZone: http://localhost:7001/eureka
instance:
instance-id: demo2-provider-8001
prefer-ip-address: true #訪問路徑可以顯示IP地址
- 修改啟動類,加上@EnableEurekaClient註解,表明這是一個eureka的客戶端,用來向eureka註冊此服務
@EnableEurekaClient //本服務啟動後會自動註冊進eureka服務中
@SpringBootApplication
public class Demo1Provider {
public static void main(String[] args) {
SpringApplication.run(Demo1Provider.class, args);
}
}
- 然後重新啟動這個服務提供者項目,就會在註冊中心中看到這個服務
三、幾個小插曲
- 如果你的eureka註冊中心出現如圖情況
請不要驚慌,這隻是eureka的自我保護意識。Eureka Server 在運行期間會去統計心跳失敗比例在 15 分鐘之內是否低於 85%,如果低於 85%,Eureka Server 會將這些實例保護起來,讓這些實例不會過期,但是在保護期內如果服務剛好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,此時會調用失敗,對於這個問題需要服務消費者端要有一些容錯機制,如重試,斷路器等。
我們在單機測試的時候很容易滿足心跳失敗比例在 15 分鐘之內低於 85%,這個時候就會觸發 Eureka 的保護機制,一旦開啟了保護機制,則服務註冊中心維護的服務實例就不是那麼準確了,此時我們可以使用eureka.server.enable-self-preservation=false
來關閉保護機制,這樣可以確保註冊中心中不可用的實例被及時的剔除(不推薦)。
- 如何搭建eureka集群
原理就是多創建幾個eureka項目,但是埠不同,然後在註冊的時候,將它們寫在一起(下期會說到)