隨著越來(lái)越多的企業(yè)采用微服務(wù)架構(gòu),服務(wù)發(fā)現(xiàn)成為了該架構(gòu)中的重要組成部分。服務(wù)發(fā)現(xiàn)提供了一種自動(dòng)在網(wǎng)絡(luò)上發(fā)現(xiàn)和定位服務(wù)的方式,使得微服務(wù)能夠相互通信。本文為大家介紹Spring Cloud Eureka,這是Netflix OSS提供的用于服務(wù)發(fā)現(xiàn)的組件。
在微服務(wù)架構(gòu)中,每個(gè)微服務(wù)都是一個(gè)具有特定業(yè)務(wù)功能的獨(dú)立應(yīng)用程序。由于這些微服務(wù)需要相互通信以作為一個(gè)完整的應(yīng)用程序運(yùn)行,它們需要了解彼此的網(wǎng)絡(luò)位置。服務(wù)發(fā)現(xiàn)在這里發(fā)揮作用,維護(hù)這些服務(wù)位置的記錄,幫助它們相互發(fā)現(xiàn)并實(shí)現(xiàn)通信。
Spring Cloud Eureka是Spring Cloud Netflix項(xiàng)目的一部分,它是一個(gè)服務(wù)注冊(cè)表,允許微服務(wù)注冊(cè)自身并發(fā)現(xiàn)其他服務(wù)。實(shí)質(zhì)上,它就像是微服務(wù)的電話簿,提供了服務(wù)與服務(wù)之間發(fā)現(xiàn)和注冊(cè)的機(jī)制。
首先,需要在pom.xml中添加spring-cloud-starter-netflix-eureka-server依賴項(xiàng):
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
然后,需要在Spring Boot應(yīng)用程序的主要應(yīng)用類中添加@EnableEurekaServer注解,啟用Eureka服務(wù)器:
@SpringBootApplication@EnableEurekaServerpublic class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); }}
最后,在application.properties文件中,定義Eureka服務(wù)器的屬性:
server.port=8761eureka.client.registerWithEureka=falseeureka.client.fetchRegistry=false
這里,server.port指定了Eureka服務(wù)器運(yùn)行的端口。接下來(lái)的兩個(gè)屬性設(shè)置為false,目的是告訴Eureka服務(wù)器不要嘗試把自身作為客戶端注冊(cè)到其他服務(wù)中心,并且不要從其他服務(wù)中心獲取注冊(cè)表信息。
接下來(lái),向Eureka服務(wù)器注冊(cè)一個(gè)簡(jiǎn)單的微服務(wù)。與設(shè)置Eureka服務(wù)器類似,首先在pom.xml文件中添加spring-cloud-starter-netflix-eureka-client依賴項(xiàng):
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
然后,在主要應(yīng)用類中啟用Eureka客戶端:
@SpringBootApplication@EnableEurekaClientpublic class ExampleMicroserviceApplication { public static void main(String[] args) { SpringApplication.run(ExampleMicroserviceApplication.class, args); }}
最后,在application.properties文件中,定義Eureka服務(wù)器的URL:
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
現(xiàn)在,當(dāng)此服務(wù)啟動(dòng)時(shí),會(huì)向Eureka服務(wù)器注冊(cè)自身。
到目前為止,已經(jīng)將服務(wù)注冊(cè)到Eureka中。現(xiàn)在看看如何發(fā)現(xiàn)服務(wù)。我們將使用Spring的RestTemplate和@LoadBalanced注解:
@SpringBootApplication@EnableEurekaClientpublic class ExampleMicroserviceApplication { @LoadBalanced @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ExampleMicroserviceApplication.class, args); }}
@LoadBalanced將集成Ribbon負(fù)載均衡器,這是另一個(gè)Netflix組件。現(xiàn)在,為了消費(fèi)一個(gè)服務(wù),使用該服務(wù)的邏輯名稱而不是硬編碼URL:
String response = restTemplate.exchange("http://example-microservice/service-endpoint", HttpMethod.GET, null, String.class);
Eureka和Ribbon將共同處理剩下的部分,發(fā)現(xiàn)服務(wù)并負(fù)載均衡任何請(qǐng)求。
Eureka的另一個(gè)功能是健康監(jiān)控,它會(huì)跟蹤注冊(cè)的服務(wù)及其可用性。服務(wù)會(huì)發(fā)送心跳以告知Eureka它們正在運(yùn)行。如果Eureka在一定時(shí)間內(nèi)未收到心跳,它將注銷該服務(wù)。
Eureka服務(wù)器的儀表板可以通過(guò)http://localhost:8761訪問(wèn),提供了一個(gè)可視化界面顯示所有注冊(cè)的服務(wù)及其詳細(xì)信息。
本文介紹了服務(wù)發(fā)現(xiàn)的基礎(chǔ)知識(shí),探討了Spring Cloud Eureka,并學(xué)習(xí)了如何使用其來(lái)注冊(cè)和發(fā)現(xiàn)服務(wù)。本文還簡(jiǎn)要介紹了Eureka的健康監(jiān)控功能。隨著讀者深入研究微服務(wù),理解這些概念并有效使用諸如Spring Cloud Eureka之類的工具將對(duì)構(gòu)建彈性和高效的應(yīng)用程序有重要作用。
這只是冰山一角。開發(fā)人員可以配置和自定義Eureka以更好地滿足其需求,包括設(shè)置高可用性的Eureka服務(wù)器集群,調(diào)整健康監(jiān)控設(shè)置,保護(hù)Eureka服務(wù)器等等。官方的Spring Cloud文檔是探索這些高級(jí)主題的優(yōu)秀資源。祝大家編碼愉快!
本文鏈接:http://www.www897cc.com/showinfo-26-53021-0.html基于Spring Cloud Eureka,三分鐘搞懂服務(wù)發(fā)現(xiàn)
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: Java常用的單元測(cè)試框架介紹