Spring Cloud Eureka 集群搭建 - 以及發現一個 “直覺BUG”


首先解釋一下標題所說的“直覺BUG”,這個是我自己的定義。就是我們直覺上認為這是一個BUG,是一個錯誤,而實際並沒有出錯。

比如下圖:

雖然出現報錯信息,但是,整個程序並沒有出錯。至於原因,圖片上的文字已經很好的解釋了。

在此,再簡單的說一下。

出現這種情況的原因是,我們的程序已經啟動(已經出現紅框中此條日志,代表程序已經啟動,所以程序本身沒有問題。),為什么會出現錯誤呢?

是因為在此系統中,我們要搭建的是集群環境, 每一台服務器在自己啟動之后,都要去連接集群中的其他服務器,以便於相互之間通訊傳遞信息。

但是,我們肯定是按照次序啟動服務器,我們不管先啟動哪一台服務器,其他的服務器都還沒有准備就緒,所以肯定會出現找不到要連接的服務器,所以會報錯。

這個錯誤根本不需要解決, 把所有的服務器全部啟動,整個集群就可以正常運行(因為出現的是連接錯誤,現在所有的服務器已經准備就緒,所以不會再一次出現連接錯誤,除非某台服務器down掉。)。

 

下面我們看一下SpringCloudEureka集群的搭建過程:

1、首先創建項目結構:(使用SpringBoot 1.5.10)

 

2、在啟動程序類頭部加入注

package com.thunisoft.thunisoftregister;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class ThunisoftRegisterApplication {

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

 

3、編寫配置文件

spring:
  application:
    name: spring-cloud-eureka
  profiles: peer1
server:
  port: 8000
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8001/eureka/,http://peer3:8002/eureka/
 fetch-registry: true register-with-eureka: true
---
spring:
  application:
    name: spring-cloud-eureka
  profiles: peer2
server:
  port: 8001
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer3:8002/eureka/
 fetch-registry: true register-with-eureka: true
---
spring:
  application:
    name: spring-cloud-eureka
  profiles: peer3
server:
  port: 8002
eureka:
  instance:
    hostname: peer3
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/
 fetch-registry: true register-with-eureka: true 

  以上配置中標紅的代碼段很重要,在此進行說明:

  1、fetch-registry:表示是否從eureka server獲取注冊信息,如果是單一節點,不需要同步其他eureka server節點,則可以設置為false,但此處為集群,應該設置為true,默認為true,可不設置。

  2、register-with-eureka:表示是否將自己注冊到eureka server,因為要構建集群環境,需要將自己注冊到及群眾,所以應該開啟。默認為true,可不顯式設置。

    

4、因為實在一台機器上實驗,所以修改host文件(windows系統下、C:\Windows\System32\drivers\etc)

127.0.0.1       peer1
127.0.0.1       peer2
127.0.0.1       peer3

  增加如上三段

 

5、啟動注冊中心服務

5.1、可以使用IDEA進行啟動

按照這個步驟添加三個啟動節點,注意: program arguments 參數依次更改為 peer2 、peer3,與配置文件中的 spring.application.files 參數值對應。

之后全部啟動。

 

5.2、打包成jar之后,使用 java -jar命令啟動

使用maven插件或gradl插件等等構件工具,將程序打包為jar。然后執行以下命令

java -jar 生成的jar包名稱.jar --spring.profiles.active=peer1
java -jar 生成的jar包名稱.jar --spring.profiles.active=peer2
java -jar 生成的jar包名稱.jar --spring.profiles.active=peer3

 

注意: 以上兩種啟動方式均可以將集群啟動,但是有一個問題要注意,就是上面提到“直覺BUG”問題。詳細參考上面。

 

6、查看集群效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM