SpringCloud封裝 了Netflix公司的eureka做爲本身微服務的註冊中心。這個註冊中心和dubbo中的zookeeper很類似,簡單來講,只要你能夠將你的」微服務「模塊註冊到註冊中心,就能夠供其餘服務調用,通常來講,只有provider會註冊到eureka,consumer也能夠註冊,可是並不建議這麼作。java
eureka的架構圖以下:git
爲了讓小夥伴們更好地學習,我將上一次的項目複製了一份(見Github項目代碼)github
<dependency> <groupId>org.springframework.cloud</groupId> <!--這個是服務端的依賴--> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
@SpringBootApplication @EnableEurekaServer public class EurekaRegistApp_7001 { public static void main(String[] args) { SpringApplication.run(EurekaRegistApp_7001.class,args); } }
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
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>
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服務中 @SpringBootApplication public class Demo1Provider { public static void main(String[] args) { SpringApplication.run(Demo1Provider.class, args); } }
請不要驚慌,這只是eureka的自我保護意識。Eureka Server 在運行期間會去統計心跳失敗比例在 15 分鐘以內是否低於 85%,若是低於 85%,Eureka Server 會將這些實例保護起來,讓這些實例不會過時,可是在保護期內若是服務恰好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,此時會調用失敗,對於這個問題須要服務消費者端要有一些容錯機制,如重試,斷路器等。架構
咱們在單機測試的時候很容易知足心跳失敗比例在 15 分鐘以內低於 85%,這個時候就會觸發 Eureka 的保護機制,一旦開啓了保護機制,則服務註冊中心維護的服務實例就不是那麼準確了,此時咱們可使用eureka.server.enable-self-preservation=false
來關閉保護機制,這樣能夠確保註冊中心中不可用的實例被及時的剔除(不推薦)。app
原理就是多建立幾個eureka項目,可是端口不一樣,而後在註冊的時候,將它們寫在一塊兒(下期會說到)maven
本項目代碼地址ide