SpringCloud之eureka註冊中心入門

eureka註冊中心

1、基本概念

SpringCloud封裝 了Netflix公司的eureka做爲本身微服務的註冊中心。這個註冊中心和dubbo中的zookeeper很類似,簡單來講,只要你能夠將你的」微服務「模塊註冊到註冊中心,就能夠供其餘服務調用,通常來講,只有provider會註冊到eureka,consumer也能夠註冊,可是並不建議這麼作。java

eureka的架構圖以下:git

2、在SpringCloud項目中使用eureka

  • 要想使用SpringCloud的子模塊,通常分爲兩步:
    1. 引入相關的maven依賴
    2. 而後在配置類上加上@EnableXXX註解

1. 建立一個新的Maven的Module項目,用來開啓eureka

​ 爲了讓小夥伴們更好地學習,我將上一次的項目複製了一份(見Github項目代碼)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註冊中心了

當有服務註冊到這裏時,就會在上圖中出現。spring

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);
    }
}
  • 而後從新啓動這個服務提供者項目,就會在註冊中心中看到這個服務

3、幾個小插曲

  • 若是你的eureka註冊中心出現如圖狀況

請不要驚慌,這只是eureka的自我保護意識。Eureka Server 在運行期間會去統計心跳失敗比例在 15 分鐘以內是否低於 85%,若是低於 85%,Eureka Server 會將這些實例保護起來,讓這些實例不會過時,可是在保護期內若是服務恰好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,此時會調用失敗,對於這個問題須要服務消費者端要有一些容錯機制,如重試,斷路器等。架構

咱們在單機測試的時候很容易知足心跳失敗比例在 15 分鐘以內低於 85%,這個時候就會觸發 Eureka 的保護機制,一旦開啓了保護機制,則服務註冊中心維護的服務實例就不是那麼準確了,此時咱們可使用eureka.server.enable-self-preservation=false來關閉保護機制,這樣能夠確保註冊中心中不可用的實例被及時的剔除(不推薦)。app

  • 如何搭建eureka集羣

原理就是多建立幾個eureka項目,可是端口不一樣,而後在註冊的時候,將它們寫在一塊兒(下期會說到)maven

本項目代碼地址ide

相關文章
相關標籤/搜索