javascript
Spring Cloud Netflix尤里卡
本教程是關(guān)于Spring云Netflix Eureka的。 在這里,我們將創(chuàng)建eureka發(fā)現(xiàn)服務(wù)器和微服務(wù),這些服務(wù)本身將注冊(cè)到發(fā)現(xiàn)服務(wù)器和使用netflix客戶端API的客戶端中,以使用示例示例來發(fā)現(xiàn)服務(wù)并使用該服務(wù)公開的微服務(wù)。因此,我們將開發(fā)每個(gè)發(fā)現(xiàn)服務(wù)器,服務(wù)和客戶端的3個(gè)不同的spring boot應(yīng)用程序。此外,我們還將研究默認(rèn)的eureka儀表板和該儀表板中可用的各種有用信息。
Spring Cloud Netflix使用簡單的基于注釋的配置為Spring Boot應(yīng)用程序提供Netflix OSS集成。現(xiàn)在是時(shí)候創(chuàng)建微服務(wù)而不是批量應(yīng)用程序并將這些微服務(wù)部署到云了。 在這種體系結(jié)構(gòu)中,服務(wù)發(fā)現(xiàn)是關(guān)鍵原則之一,服務(wù)發(fā)現(xiàn)可根據(jù)需要自動(dòng)創(chuàng)建多個(gè)實(shí)例,并提供微服務(wù)的高可用性,這里我們將使用Eureka作為Netflix服務(wù)發(fā)現(xiàn)服務(wù)器和客戶端。
Spring Cloud Eureka發(fā)現(xiàn)服務(wù)器
發(fā)現(xiàn)服務(wù)器是所有可用服務(wù)的注冊(cè)表。不同的服務(wù)可以在此服務(wù)器上進(jìn)行注冊(cè)和注銷。使用spring boot實(shí)施eureka發(fā)現(xiàn)服務(wù)器非常簡單。 為此,首先我們將創(chuàng)建一個(gè)具有start.spring.io以下依賴項(xiàng)的spring boot應(yīng)用程序,并將其導(dǎo)入我們的IDE中。
這帶來了以下Maven依賴關(guān)系。啟用Spring Cloud所需的依賴關(guān)系是spring-cloud-dependencies。
pom.xml
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>pring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>并且我們?cè)赼pplication.properties定義了以下屬性。在這里,spring.application.name提供了此服務(wù)的唯一標(biāo)識(shí)符。在啟動(dòng)發(fā)現(xiàn)服務(wù)器時(shí),它將嘗試向其對(duì)等發(fā)現(xiàn)服務(wù)器注冊(cè)以獲得我們沒有的高可用性本教程。我們沒有發(fā)現(xiàn)服務(wù)器的多個(gè)實(shí)例。因此eureka.client.register-with-eureka設(shè)置為false。
同樣,我們具有eureka.client.fetch-registry屬性,該屬性指示此客戶端是否應(yīng)從eureka服務(wù)器獲取eureka注冊(cè)信息。 并且server.port定義了我們的發(fā)現(xiàn)服務(wù)器將在其上運(yùn)行的端口。
spring.application.name=discovery-server eureka.client.register-with-eureka=false eureka.client.fetch-registry=false server.port=8761現(xiàn)在讓我們定義我們的DiscoveryServerApplication。@ EnableEurekaServer將啟用eureka服務(wù)器配置。 當(dāng)我們將此類作為Java程序運(yùn)行時(shí),它將在http:// localhost:8761 / eureka /處添加新的對(duì)等節(jié)點(diǎn),并且我們的微服務(wù)將調(diào)用該URL進(jìn)行自身注冊(cè)。
DiscoveryServerApplication.java
package com.devglan.discoveryserver;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer @SpringBootApplication public class DiscoveryServerApplication {public static void main(String[] args) {SpringApplication.run(DiscoveryServerApplication.class, args);} }發(fā)現(xiàn)服務(wù)器就是這樣。 我們的發(fā)現(xiàn)服務(wù)器已準(zhǔn)備就緒,可以接受來自http:// localhost:8761 / eureka上任何服務(wù)的注冊(cè)請(qǐng)求。
Spring Cloud Eureka服務(wù)
發(fā)現(xiàn)服務(wù)器準(zhǔn)備就緒后,現(xiàn)在讓我們創(chuàng)建微服務(wù) 。 同樣,這將是spring boot app,我們將使用spring boot starter下載示例項(xiàng)目。
這是pom文件。
pom.xml
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>該模塊將充當(dāng)微服務(wù),并在啟動(dòng)時(shí)將其自身注冊(cè)到發(fā)現(xiàn)服務(wù)器。為此注冊(cè),我們需要在application.properties配置有關(guān)發(fā)現(xiàn)服務(wù)器的信息。下面是entrys.spring.application.name是唯一標(biāo)識(shí)符對(duì)于此服務(wù),eureka.client.service-url.defaultZone是服務(wù)光盤服務(wù)器的URL。
spring.application.name=eureka-service eureka.client.service-url.defaultZone=http://localhost:8761/eureka server.port=8085要將此應(yīng)用程序配置為eureka服務(wù)和發(fā)現(xiàn)服務(wù)器的客戶端,我們需要使用@EnableDiscoveryClient注釋我們的spring boot應(yīng)用程序
package com.devglan.eurekaservice;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient @SpringBootApplication public class EurekaServiceApplication {public static void main(String[] args) {SpringApplication.run(EurekaServiceApplication.class, args);} }以下是控制器類,我們?cè)谄渲袨榭蛻舳藨?yīng)用程序公開了微服務(wù)。
GreetingController.java
package com.devglan.eurekaservice.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class GreetingController {@GetMapping("/")public String greeting(){return "Hello from" ;}}Spring Cloud Eureka客戶端
現(xiàn)在是時(shí)候定義我們的客戶了,為此,我們將再次使用spring starter生成以下項(xiàng)目。
該客戶端將與eureka服務(wù)發(fā)現(xiàn)服務(wù)器進(jìn)行交互,并使用eureka客戶端發(fā)現(xiàn)服務(wù),然后使用上面我們的服務(wù)實(shí)現(xiàn)公開的微服務(wù)。以下是示例pom.xml文件。
pom.xml
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>application.properties文件中需要以下條目。 由于這是一個(gè)客戶項(xiàng)目,因此我們不希望它注冊(cè)到發(fā)現(xiàn)服務(wù)器。 但是在某些情況下,應(yīng)用程序既可以是客戶端又可以是服務(wù)器。在這種情況下,eureka.client.register-with-eureka將為真。
application.properties
spring.application.name=eureka-client eureka.client.service-url.defaultZone=http://localhost:8761/eureka eureka.client.register-with-eureka=false以下是我們的Application類。 它帶有@EnableDiscoveryClient注釋,以將該應(yīng)用程序注冊(cè)為發(fā)現(xiàn)客戶端。
package com.devglan.eurekaclient;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient @SpringBootApplication public class EurekaClientApplication {public static void main(String[] args) {SpringApplication.run(EurekaClientApplication.class, args);} }現(xiàn)在,我們將定義控制器,它將在根級(jí)別公開一個(gè)API。 這個(gè)API將從發(fā)現(xiàn)服務(wù)器發(fā)現(xiàn)服務(wù)并調(diào)用服務(wù)。在這里,我們已經(jīng)自動(dòng)連接了eureka客戶端,并且getNextServerFromEureka()接受兩個(gè)參數(shù)。 第一個(gè)參數(shù)是微服務(wù)應(yīng)用程序的服務(wù)標(biāo)識(shí)符。 我們上面的服務(wù)實(shí)現(xiàn)已使用名稱為eureka-service的發(fā)現(xiàn)客戶端注冊(cè)了自己,并且eureka客戶端應(yīng)用程序?qū)⑹褂孟嗤拿Q來發(fā)現(xiàn)服務(wù)。
一旦發(fā)現(xiàn)該服務(wù),客戶端將調(diào)用微服務(wù)。記住,我們?cè)谏厦娴姆?wù)實(shí)現(xiàn)中公開了一個(gè)greeting API,并且客戶端將調(diào)用相同的API。
ClientController.java
package com.devglan.eurekaclient.controller;import com.netflix.appinfo.InstanceInfo; import com.netflix.discovery.EurekaClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;@RestController public class ClientController {@Autowiredprivate EurekaClient eurekaClient;@Autowiredprivate RestTemplateBuilder restTemplateBuilder;@GetMapping("/")public String invokeService(){RestTemplate restTemplate = restTemplateBuilder.build();InstanceInfo instanceInfo = eurekaClient.getNextServerFromEureka("eureka-service", false);String serviceBaseUrl = instanceInfo.getHomePageUrl();return restTemplate.getForObject(serviceBaseUrl, String.class);} }測(cè)試應(yīng)用
要測(cè)試應(yīng)用程序,請(qǐng)首先啟動(dòng)發(fā)現(xiàn)服務(wù)器。 為此,我們需要將DiscoveryServerApplication.java作為Java應(yīng)用程序運(yùn)行。 您可以檢查控制臺(tái)并找到類似的日志,如下所示。 您還可以在發(fā)現(xiàn)服務(wù)器公開的控制臺(tái)中看到URL http:// localhost:8761 / eureka / ,以注冊(cè)服務(wù)。
現(xiàn)在,啟動(dòng)服務(wù),將EurekaServiceApplication.java作為Java應(yīng)用程序運(yùn)行。 您還可以運(yùn)行該服務(wù)的多個(gè)實(shí)例。所有實(shí)例都將在發(fā)現(xiàn)服務(wù)器中注冊(cè)。成功注冊(cè)該服務(wù)后,您將從發(fā)現(xiàn)客戶端獲得204響應(yīng)。
現(xiàn)在,以類似的方式通過將EurekaClientApplication.java作為Java應(yīng)用程序運(yùn)行EurekaClientApplication.java啟動(dòng)客戶端。
現(xiàn)在從URL上輸入U(xiǎn)RL http:// localhost:8080 ,從eureka服務(wù)應(yīng)用程序中以Hello的形式檢查字符串響應(yīng)。
Spring Cloud Eureka儀表板
您可能已經(jīng)在發(fā)現(xiàn)服務(wù)器實(shí)現(xiàn)中的application.properties文件中注意到我們配置的端口為8761。在該端口上,Spring cloud eureka提供了一個(gè)默認(rèn)啟用的儀表板,該儀表板顯示有用的元數(shù)據(jù)和服務(wù)狀態(tài)。在這里我們可以檢查關(guān)于發(fā)現(xiàn)服務(wù)器副本的信息(在本例中為1,該副本在localhost上運(yùn)行)。類似地,我們還具有關(guān)于發(fā)現(xiàn)服務(wù)器的注冊(cè)服務(wù)的信息以及當(dāng)前狀態(tài)。
結(jié)論
在本教程中,我們了解了Spring Cloud netflix eureka的實(shí)現(xiàn)。 我們實(shí)現(xiàn)了發(fā)現(xiàn)服務(wù)器,應(yīng)用程序服務(wù)和應(yīng)用程序客戶端。可以從此處下載源。如果您有任何要添加或共享的內(nèi)容,請(qǐng)?jiān)谙旅娴脑u(píng)論部分中共享。
翻譯自: https://www.javacodegeeks.com/2018/03/spring-cloud-netflix-eureka.html
總結(jié)
以上是生活随笔為你收集整理的Spring Cloud Netflix尤里卡的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javaml_一些基于Java的AI框架
- 下一篇: spring mvc拆分_Spring集