高可用的環境下我們配置兩台eurekaServer。
1、設定maven依賴,請參考上一篇-單例模式
2、設定java啟動類,請參考上一篇-單例模式
3、配置yml檔案
server1
server:
port: 8700
servlet:
context-path: /eurekaServer
spring:
application:
name: eurekaServer1
eureka:
instance:
hostname: eurekaServer
client:
service-url:
#設定一個注冊服務中心的url,用于服務端之間的互動
defaultZone: http://eurekaServer2:8701/eurekaServer2/eureka
server2
server:
port: 8701
servlet:
context-path: /eurekaServer2
spring:
application:
name: eurekaServer2
eureka:
instance:
hostname: eurekaServer2
client:
service-url:
defaultZone: http://eurekaServer:8700/eurekaServer/eureka
PS:注意兩個server的defaultZone,他們倆互相進行了注冊,作為彼此的用戶端,同時設定了hostname.
hostname 用來定義peer,此時需要在你電腦的hosts檔案中配置對應關系。

當eurekaServer進行高可用之後兩台server之間會進行資訊同步,配置defaultZone和peer就是在此時使用的。
如server2同步了server1的資訊,server1就是server2的peer。
運作兩台服務端(第一個服務端啟動時會報錯,這是因為此時服務端在向另一台服務端進行注冊,但是另一個服務端還沒有啟動,第一個服務端無法正常連接配接注冊,是以報錯,等到第二個服務端也啟動成功第一個服務端就不會報錯了)。
服務端一:啟動成功但是報錯
啟動第二個服務端
這是因為兩個服務端分别向對方進行了注冊(server1有server2的資訊,server2有server1的資訊,),互相注冊後又進行了資訊同步,是以就可以在自己的注冊清單中看到自己的資訊了。
此時我們設定兩個用戶端,都向server1進行注冊(用戶端注冊請參考上一章【單例模式】),運作用戶端
server:
port: 8601
servlet:
context-path: /eureka-client
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8700/eurekaServer/eureka/
spring:
application:
name: test-demo
--------------------------------------------
server:
port: 8062
servlet:
context-path: /eureka-clinet1
eureka:
client:
service-url:
defaultZone: http://localhost:8700/eurekaServer/eureka
spring:
application:
name: test1
我們的用戶端都向sever1進行了注冊,此時我們看server2的管理界面
雖然兩個服務是向eurekaServer1進行注冊,但是因為eurekaServer之間在高可用模式下進行資料同步是以eurekaServer2上也會有這兩個服務的注冊資訊。
QA:當eurekaServer1程式關閉時,被同步到server2的兩個服務的注冊資訊是否會失效?
大家可以做做試驗思考一下(*^▽^*)