首先解釋一下標題所說的“直覺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、查看集群效果