天天看點

SpringCloud之——Eureka服務注冊與發現

Eureka作為SpringCloud全家桶的注冊中心,最常說到的問題就是他與zookeeper的差別是什麼,我們都知道ACP(可用性、一緻性、分區容錯性),那麼P是必須要保證的,而三者又不可能同時滿足,那麼在設計的時候就看各自産品的側重點了,Eureka和Zookeeper兩個都能夠作為注冊中心使用,他們的主要差別是zookeeper保證的是CP(一緻性,分區容錯性),而Eureka保證的是AP(可用性和分區容錯性)!

廢話說完了,直接看看怎麼寫一個Eureka吧!

同時附上我練習時搭建的一個簡單的SpringCloud項目,其中包含了feign、swagger-ui、rabbitmq、redis、aop、定時任務、檔案上傳于下載下傳、excel導出、多資料源配置等demo,該項目也包含了SpringCloud的常用元件:

下載下傳連結://download.csdn.net/download/weixin_45417573/12104123

一、建立服務

Eureka是作為一個獨立的服務存在的,是以首先我們要建立一個Eureka服務,也就是一個Springboot項目,這一部分就不做多的叙述,當然,作為微服務的一部分,自然也是作為項目的其中一個子服務存在!

二、添加依賴

這裡要注意的是,Eureka服務需要添加EurekaServer依賴,其他服務也要添加EurekaClient的依賴

1、Servcer

<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		<artifactId>
  			spring-cloud-starter-netflix-eureka-server
  		</artifactId>
  	</dependency>
           

2、Client

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>
  		spring-cloud-starter-netflix-eureka-client
  			</artifactId>
		</dependency>
           

三、添加啟動類注解

同樣,這裡有服務和用戶端的差別

1、Server

2、Client

四、修改yml配置

這裡依舊分為服務和用戶端的差別

1、Server

這兩個false至關重要,也是與client的主要差別

eureka:
  server:
  #關閉eureka的自我保護機制(開發階段)
    enable-self-preservation: false
  instance:
    #prefer-ip-address: true #以IP位址注冊到服務中心,互相注冊使用IP位址
    hostname: eureka1 #以服務名注冊到服務中心(叢集之間互相區分)
    #最後一次心跳後間隔多久沒有心跳認定服務不可用(一次心跳30秒)
    lease-expiration-duration-in-seconds: 60
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka
      #不将自己注冊到eureka中
    register-with-eureka: false
    #不拉取注冊資訊
    fetch-registry: false
           

關于保護機制,簡單的說是eureka會與服務之間有一個心跳檢測機制,心跳預設30秒發送一次,如果60秒(我們自己配置的60秒,預設是90秒)收不到心跳回報,eureka就會認為服務是不可用的,但是eureka并不認為服務是真的不可用了,是以也就不會删除其注冊資訊,而是将注冊資訊保護起來,有時候我們看到eureka頁面上出現

EMERGENCY!EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT.RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEGING EXPIRED JUST TO BE SAFE

的紅色警告就是這個原因,但是開發階段由于頻繁的重新開機服務可能導緻保護機制的啟用,可以暫時關閉保護機制!

2、Client

eureka:
  instance:
    prefer-ip-address: true #以IP位址注冊到服務中心,互相注冊使用IP位址
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/
           

五、測試

首先啟動eureka服務,然後啟動其他的服務,啟動後在浏覽器中通路eureka服務看有沒有如下網頁,網頁中如果有你注冊的相關服務即可判斷eureka是否正确:

SpringCloud之——Eureka服務注冊與發現

注意,通路的時候直接通路ip:端口,後面不要加eureka!!