1. 程式人生 > >Spring Cloud 實戰(二)- Eureka 高可用註冊中心

Spring Cloud 實戰(二)- Eureka 高可用註冊中心

Eureka 高可用註冊中心

點餐系統中的產品服務、訂單服務已寫了大半,但是註冊中心高可用一直還沒解決,今兒就把我遇到的坑塵現出來,避免以後再遇到此問題無章可循了。

Eureka Server1 配置

server:
  port: 9009
  # spring
spring:
  application:
    name: eureka
  profiles:
    active: peers0
#Eureka Server
eureka:
  client:
    service-url:
      defaultZone: http://peers1:9010/eureka/
    fetch-registry: true
    register-with-eureka: true
  instance:
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
    hostname: peers0
    prefer-ip-address: false

Eureka Server2 配置

server:
  port: 9010
  # spring
spring:
  application:
    name: eureka
  profiles:
    active: peers1
#Eureka Server
eureka:
  client:
    service-url:
      defaultZone: http://peers0:9009/eureka/
    fetch-registry: true
    register-with-eureka: true
  instance:
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
    hostname: peers1
    prefer-ip-address: false

hosts 配置

127.0.0.1 peers0
127.0.0.1 peers1

結果展示

在這裡插入圖片描述

坑點兒

網上看到的情況大都是這樣子的: 在這裡插入圖片描述

unavailable-replicas 問題一大推,總結了幾個原因會導致這類問題:

1. eureka.client.serviceUrl.defaultZone配置項的地址,不能使用localhost,要使用peers0、peers1之類的域名,通過host對映到127.0.0.1;
2. spring.application.name或eureka.instance.hostname必須一致;
3. 相互註冊要開啟:  
	eureka.client.register-with-eureka=true 
	eureka.client.fetch-registry=true 

我之前遇到的問題是,兩個 eureka 服務的spring.application.name不一致導致。具體配置情況可參考 翟永超的《Spring Cloud微服務實戰》 Page:46的詳細說明。