本篇文章為大家展示了SpringCloud中怎么搭建Eureka服務(wù)注冊(cè)中心,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到上高網(wǎng)站設(shè)計(jì)與上高網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋上高地區(qū)。
Eureka和Consul、Zookeeper等類似,是一個(gè)用戶服務(wù)發(fā)現(xiàn)和服務(wù)注冊(cè)的組件,最開始主要用于亞馬遜旗下的云計(jì)算服務(wù)平臺(tái)AWS。Eureka分為EurekaServer(服務(wù)注冊(cè)中心)和EurekaClient(客戶端)。
1:完全開源,且經(jīng)過(guò)三年時(shí)間迭代,性能和功能都非常穩(wěn)定。
2:是SpringCloud官方推薦的注冊(cè)中心,能夠和SpringCloud其他組件完美對(duì)接。
3:Eureka能夠和Ribbon、Hystrix、Zuul等其他組件相互配合,快速完成服務(wù)注冊(cè)中心,和這些組件并稱Netfilx OOS組件,由SpringCloud整合,是SpringCloud的核心服務(wù)組件,也是基礎(chǔ)組件。
Talking is boolshit, just look at the code!
父項(xiàng)目pom.xml
com.calvin.cloud cloud_day01 pom 1.0-SNAPSHOT eureka-server eureka-client org.springframework.boot spring-boot-starter-parent 1.5.3.RELEASE UTF-8 UTF-8 1.8 org.springframework.cloud spring-cloud-dependencies Dalston.SR4 pom import
使用SpringInitializr創(chuàng)建兩個(gè)子Module,分別是eureka-server和eureka-client
eureka-server/pom.xml
cloud_day01 com.calvin.cloud 1.0-SNAPSHOT 4.0.0 eureka-server org.springframework.cloud spring-cloud-starter-eureka-server org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
eureka-server/EurekaServerApplication.java
/** * EurekaServer啟動(dòng)類 * @author Calvin * @date 2019/07/29 */ @SpringBootApplication @EnableEurekaServer public class ServerApplication { public static void main(String[] args) { SpringApplication.run(ServerApplication.class); } }
eureka-server/application.yml
server: port: 8080 eureka: instance: hostname: localhost client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
啟動(dòng)EurekaServerApplication.main(),瀏覽器訪問(wèn) http://localhost:8080/eureka 此時(shí)顯示并沒有可用服務(wù)注冊(cè)進(jìn)來(lái)No instances available
eureka-client/pom.xml
cloud_day01 com.calvin.cloud 1.0-SNAPSHOT 4.0.0 eureka-client org.springframework.cloud spring-cloud-starter-eureka org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-maven-plugin
eureka-client/application.yml
server: port: 8081 spring: application: name: my_eureka_client eureka: client: service-url: defaultZone: http://localhost:8080/eureka/
eureka-client/ClientApplication.java
/** * Client測(cè)試啟動(dòng)類 * @author Calvin * @date 2019/09/29 */ @SpringBootApplication @EnableEurekaClient public class ClientApplication { public static void main(String[] args) { SpringApplication.run(ClientApplication.class); } }
刷新http://localhost:8080/eureka 發(fā)現(xiàn)服務(wù)已經(jīng)注冊(cè)成功了
1:Register———服務(wù)注冊(cè)
服務(wù)注冊(cè)即是EurekaClient祥EurekaServer提交注冊(cè)自己的服務(wù)信息,包括IP地址、端口,ServiceID等信息。如果EurekaClient中沒有ServiceId,則默認(rèn)以配置文件中的#{spring.application.name}為服務(wù)名。
2:Renew———服務(wù)續(xù)約
EurekaClient默認(rèn)每隔30s發(fā)送一次心跳來(lái)進(jìn)行服務(wù)續(xù)約。通過(guò)服務(wù)續(xù)約來(lái)告知EurekaServer該EurekaClient依然可用,沒有出現(xiàn)故障。如果EurekaServer在90s之內(nèi)沒有收到心跳,則EurekaServer會(huì)認(rèn)為該服務(wù)已經(jīng)掛掉,則會(huì)將該EurekaClient實(shí)力從注冊(cè)列表中剔除掉。
3:FetchRegistries———獲取服務(wù)注冊(cè)列表信息
EurekaClient從EurekaServer中獲取服務(wù)注冊(cè)表信息,并將其緩存在本地。EurekaClient會(huì)使用服務(wù)注冊(cè)列表中的信息查找其他服務(wù)的信息,從而進(jìn)行遠(yuǎn)程調(diào)用。
該注冊(cè)列表信息會(huì)定時(shí)30s從服務(wù)端更新一次,每次返回的注冊(cè)列表信息可能與EurekaClient緩存的信息不匹配,EurekaClient會(huì)自己處理這些信息。如果由于某種原因?qū)е伦?cè)列表信息不能及時(shí)匹配,則EurekaClient會(huì)重新更新這些信息。
EurekaServer緩存了所有的服務(wù)注冊(cè)列表信息,并將整個(gè)服務(wù)列表以及每隔應(yīng)用程序進(jìn)行了壓縮,壓縮內(nèi)容和沒有壓縮的內(nèi)容完全相同。EurekaClient和EurekaServer可以是用JSON和XML數(shù)據(jù)格式相互通信。在默認(rèn)的情況下,EurekaClient使用JSON格式的方式獲取服務(wù)注冊(cè)列表信息。
4:Cancel———服務(wù)下線
EurekaClient在程序關(guān)閉時(shí)可以向EurekaServer發(fā)送下線請(qǐng)求,發(fā)送請(qǐng)求后,該客戶端的實(shí)例信息將從EurekaServer的服務(wù)信息列表中刪除。該下線請(qǐng)求不會(huì)自動(dòng)完成,需要在程序關(guān)閉時(shí)調(diào)用以下代碼 DiscoverManager.getInstance().shutdownComponent();
5:Evication———服務(wù)剔除
在默認(rèn)情況下,當(dāng)EurekaClient連續(xù)90s沒有像EurekaServer發(fā)送心跳,EurekaServer則會(huì)認(rèn)為該服務(wù)已經(jīng)不可用,將該服務(wù)實(shí)例從服務(wù)列表信息中刪除。
上面的架構(gòu)描述了Eureka在Netflix上的部署方式,也是正常Eureka正常的部署和運(yùn)行方式。每個(gè)區(qū)域都有一個(gè)Eureka集群,且每個(gè)區(qū)域至少有一個(gè)Eureka服務(wù)器來(lái)處理區(qū)域故障。
服務(wù)在EurekaServer注冊(cè),然后發(fā)送心跳以每30秒更新其租約。如果客戶端無(wú)法保持心跳,EurekaServer將在90秒后從出服務(wù)器注冊(cè)列表中剔除此服務(wù)實(shí)例。注冊(cè)信息和續(xù)約信息將復(fù)制到集群中的所有EurekaServer節(jié)點(diǎn)。來(lái)自任何區(qū)域EurekaClient都可以每隔30s獲取到所有注冊(cè)列表信息,并進(jìn)行遠(yuǎn)程調(diào)用。 以上資料來(lái)自于官網(wǎng):https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance
簡(jiǎn)單介紹Eureka以及優(yōu)缺點(diǎn)
編寫第一個(gè)Eureka注冊(cè)中心
了解Eureka中的概念和高可用注冊(cè)中心的架構(gòu)
內(nèi)容相對(duì)簡(jiǎn)單,沒有對(duì)概念進(jìn)行深入剖析
代碼中沒有進(jìn)行集群搭建,也沒有測(cè)試服務(wù)提供者和消費(fèi)者
后續(xù)應(yīng)該加上源碼解析
上述內(nèi)容就是SpringCloud中怎么搭建Eureka服務(wù)注冊(cè)中心,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。