1. 程式人生 > >SpringCloud之EurekaServer叢集技術

SpringCloud之EurekaServer叢集技術

注意:spingcloud的版本號與springboot的衝突問題我這裡用的springcloud版本是:finchley.SR2,springboot版本是:2.0.7。

注意:spingcloud的版本號與springboot的衝突問題我這裡用的springcloud版本是:finchley.SR2,springboot版本是:2.0.7。

建立專案

 編寫配置檔案application.yml 

 

---
spring:
  profiles: peer1
server:
  port: 8800
eureka:
  instance:
    hostname: peer1
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://127.0.0.1:8900/eureka/

---
spring:
  profiles: peer2
server:
  port: 8900
eureka:
  instance:
    hostname: peer2
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://127.0.0.1:8800/eureka/


 

 啟動類加註解

@EnableEurekaServer
@SpringBootApplication
public class EurekaschoolingApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaschoolingApplication.class, args);
    }
}

這裡程式碼階段已經完成

打包

專案打包方式自選

啟動專案

採用如下命令

java -jar eurekaschooling-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1 
java -jar eurekaschooling-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

 

在瀏覽其中分別開啟如下網址能夠成功,說明我們的叢集搭建完畢

http://127.0.0.1:8800/

http://127.0.0.1:8900/

 

深入理解高可用

這裡到了如何配置服務消費者的問題了

這是官網的配置:

eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1/eureka/,http://peer2/eureka/,http://peer3/eureka/

這裡有一個問題:

如果我們是由10個eureka叢集搭建的註冊中心,那麼我們每個消費者配置檔案中都要把這10個註冊中心的url都寫上。這顯然是不太可行的。

這就涉及到了eureka的叢集原理了。只要我們再任意個服務的url註冊了,叢集中的其他註冊服務都會同步。

就算是服務註冊的這個Url的宕機 了,服務 依然可用。

這才是高可用啊!!!

下面我們來繼續探討

繼續修改前面專案的application.yml

---
spring:
  profiles: peer1
server:
  port: 8800
eureka:
  instance:
    hostname: peer1
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://127.0.0.1:8900/eureka/,http://127.0.0.1:9000/eureka/

---
spring:
  profiles: peer2
server:
  port: 8900
eureka:
  instance:
    hostname: peer2
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://127.0.0.1:9000/eureka/,http://127.0.0.1:8800/eureka/

---
spring:
  profiles: peer3
server:
  port: 9000
eureka:
  instance:
    hostname: peer3
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://127.0.0.1:8800/eureka/,http://127.0.0.1:8900/eureka/




打包後啟動

java -jar eurekaschooling-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1 
java -jar eurekaschooling-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
java -jar eurekaschooling-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer3

分別訪問如下地址

http://127.0.0.1:8800/

http://127.0.0.1:8900/

http://127.0.0.1:9000/

可以看到啟動成功

但是我們還要測試服務註冊能不能三個都同步

編寫服務註冊工程

 

 

配置檔案application.yml

server:
  port: 8765

spring:
  application:
    name: client

eureka:
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:9000/eureka/

啟動類

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaclientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaclientApplication.class, args);
    }
}

執行測試

可以看到在三個服務中都完成了註冊,說明叢集實現了同步。

將埠為9000的服務宕機

可以看到在其他兩個服務中依然有效。這就是高可用!!!