Spring?Cloud?Eureka?搭建?&?集群方式
關(guān)于Eureka的詳細(xì)介紹已經(jīng)在上篇文章通俗的講了。
Eureka 本身是使用java 來(lái)開發(fā)的,Spring Cloud 使用 Spring Boot 技術(shù)對(duì) Eureka進(jìn)行了封裝,所以在Spring Cloud中使用Eureka非常方便,只需要引入spring-cloud-starter-netflix-eureka-server依賴即可,然后啟動(dòng)即可。
1.Eureka 搭建
創(chuàng)建一個(gè)普通的Spring Boot項(xiàng)目,創(chuàng)建時(shí)添加Eureka依賴:
項(xiàng)目創(chuàng)建成功后,在項(xiàng)目啟動(dòng)類上添加注解,標(biāo)記該項(xiàng)目是一個(gè)Eureka Server:
@SpringBootApplication @EnableEurekaServer //開啟Eureka public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
在application.properties 中配置:
# 給當(dāng)前服務(wù)取名 spring.application.name=eureka #端口號(hào) server.port=1111 #默認(rèn)情況下,eureka server 也是一個(gè)普通的微服務(wù),所以當(dāng)它還是一個(gè)注冊(cè)中心的時(shí)候,會(huì)有兩層身份: # 1.注冊(cè)中心 # 2.普通服務(wù),即當(dāng)前服務(wù)會(huì)自己注冊(cè)到自己上面來(lái) # false 意為當(dāng)前項(xiàng)目不要注冊(cè)到注冊(cè)中心上 eureka.client.register-with-eureka=false # 表示是否從 eureka server 上注冊(cè)信息 eureka.client.fetch-registry=false
然后啟動(dòng)項(xiàng)目,項(xiàng)目啟動(dòng)成功后在瀏覽器訪問(wèn):http://localhost:1111 就可以看到Eureka的管理頁(yè)面了。
如下:
2. Eureka 集群
使用了注冊(cè)中心后,所有的服務(wù)都要通過(guò)服務(wù)注冊(cè)中心來(lái)進(jìn)行信息交換。服務(wù)注冊(cè)中心的穩(wěn)定性就非常重要了,一旦服務(wù)注冊(cè)中心掉線,會(huì)影響到整個(gè)系統(tǒng)的穩(wěn)定性。所以在實(shí)際開發(fā)中,Eureka一般都是以集群的形式出現(xiàn)的。
Eureka集群,實(shí)際上就是啟動(dòng)多個(gè)Eureka實(shí)例, 多個(gè)Eureka實(shí)例之間互相注冊(cè),互相同步數(shù)據(jù),共同組成一個(gè)Eureka集群。
搭建Eureka集群,首先要修改電腦的hosts文件(c:\windows\System32\drivers\etc\hosts),Linux上面搭建請(qǐng)點(diǎn)擊這篇文章查看。
我這里為了方便操作,直接在第一步搭建 eureka 的 demo基礎(chǔ)上,在resources目錄下,再添加兩個(gè)配置文件,分別如下:
application-a.properties配置如下:
# 給當(dāng)前服務(wù)取名 spring.application.name=eureka #端口號(hào) server.port=1111 eureka.instance.hostname=eurekaA #默認(rèn)情況下,eureka server 也是一個(gè)普通的微服務(wù),所以當(dāng)它還是一個(gè)注冊(cè)中心的時(shí)候,會(huì)有兩層身份: # 1.注冊(cè)中心 # 2.普通服務(wù),即當(dāng)前服務(wù)會(huì)自己注冊(cè)到自己上面來(lái) # false 意為當(dāng)前項(xiàng)目不要注冊(cè)到注冊(cè)中心上 eureka.client.register-with-eureka=true # 表示是否從 eureka server 上注冊(cè)信息 eureka.client.fetch-registry=true # A服務(wù)注冊(cè)到B服務(wù)上( 配置多個(gè)的話后面用逗號(hào)隔開) eureka.client.service-url.defaultZone=http://eurekaB:1112/eureka
application-b.properties配置如下:
# 給當(dāng)前服務(wù)取名 spring.application.name=eureka #端口號(hào) server.port=1112 eureka.instance.hostname=eurekaB #默認(rèn)情況下,eureka server 也是一個(gè)普通的微服務(wù),所以當(dāng)它還是一個(gè)注冊(cè)中心的時(shí)候,會(huì)有兩層身份: # 1.注冊(cè)中心 # 2.普通服務(wù),即當(dāng)前服務(wù)會(huì)自己注冊(cè)到自己上面來(lái) # false 意為當(dāng)前項(xiàng)目不要注冊(cè)到注冊(cè)中心上 eureka.client.register-with-eureka=true # 表示是否從 eureka server 上注冊(cè)信息 eureka.client.fetch-registry=true eureka.client.service-url.defaultZone=http://eurekaA:1111/eureka
配置完成后對(duì)當(dāng)前項(xiàng)目打包,
打完包在IDEA命令行啟動(dòng)兩個(gè)實(shí)例。兩個(gè)啟動(dòng)命令分別如下:
java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=a java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=b
注意:?jiǎn)?dòng)第一個(gè)a之后你會(huì)發(fā)現(xiàn)控制臺(tái)報(bào)錯(cuò),是因?yàn)樗恢卑l(fā)送心跳,而同時(shí)b還沒有上線,等b也啟動(dòng)后錯(cuò)誤即可消失。如果還報(bào)錯(cuò),那就是代碼的問(wèn)題了。
啟動(dòng)成功后,就可以看到兩個(gè)服務(wù)之間互相注冊(cè),共同組成一個(gè)集群。
如下圖:
2.1 Eureka 集群原理
官方的Eureka集群架構(gòu)圖:
在這個(gè)集群架構(gòu)中,Eureka Server 之間過(guò) Replicate 進(jìn)行數(shù)據(jù)同步,不同的 EurekaServer 之間不區(qū)分主從節(jié)點(diǎn),所有節(jié)點(diǎn)都是平等的。
節(jié)點(diǎn)之間,通過(guò)置頂 serviceUrl 來(lái)相注冊(cè),形成一個(gè)集群,進(jìn)而提高節(jié)點(diǎn)的可用性。
在 Eureka Server 集群中,如果有某一個(gè)節(jié)點(diǎn)宕機(jī),Eureka Client 會(huì)自動(dòng)切到新的 Eureka Server 上。每一個(gè)Eureka Server,都會(huì)互相同步數(shù)據(jù)。
Eureka Server 的連接方式,可以是單線的,就是A——>b——>C,此時(shí),A的數(shù)據(jù)也會(huì)和C之間相同步。
但是一般不建議這種寫法,在我們配置 serviceUrl 時(shí),可以指定多個(gè)注冊(cè)地址,即A可以即注冊(cè)到B上,也可以同時(shí)注冊(cè)到C上。
Eureka分區(qū):
1.region:地理上的不同區(qū)域
2.zone:具體的機(jī)房
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot Debug調(diào)試過(guò)程圖解
這篇文章主要介紹了Spring Boot Debug調(diào)試過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01SpringBoot實(shí)現(xiàn)接口冪等性的4種方案
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)接口冪等性的4種方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Springboot訪問(wèn)html頁(yè)面步驟解析
這篇文章主要介紹了Springboot訪問(wèn)html頁(yè)面過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06servlet之session工作原理簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了servlet之session工作原理簡(jiǎn)介,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07Java多文件以ZIP壓縮包導(dǎo)出的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了Java多文件以ZIP壓縮包導(dǎo)出的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07