javascript
Spring Cloud Netflix尤里卡
本教程是關于Spring云Netflix Eureka的。 在這里,我們將創建eureka發現服務器和微服務,這些服務本身將注冊到發現服務器和使用netflix客戶端API的客戶端中,以使用示例示例來發現服務并使用該服務公開的微服務。因此,我們將開發每個發現服務器,服務和客戶端的3個不同的spring boot應用程序。此外,我們還將研究默認的eureka儀表板和該儀表板中可用的各種有用信息。
Spring Cloud Netflix使用簡單的基于注釋的配置為Spring Boot應用程序提供Netflix OSS集成。現在是時候創建微服務而不是批量應用程序并將這些微服務部署到云了。 在這種體系結構中,服務發現是關鍵原則之一,服務發現可根據需要自動創建多個實例,并提供微服務的高可用性,這里我們將使用Eureka作為Netflix服務發現服務器和客戶端。
Spring Cloud Eureka發現服務器
發現服務器是所有可用服務的注冊表。不同的服務可以在此服務器上進行注冊和注銷。使用spring boot實施eureka發現服務器非常簡單。 為此,首先我們將創建一個具有start.spring.io以下依賴項的spring boot應用程序,并將其導入我們的IDE中。
這帶來了以下Maven依賴關系。啟用Spring Cloud所需的依賴關系是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>并且我們在application.properties定義了以下屬性。在這里,spring.application.name提供了此服務的唯一標識符。在啟動發現服務器時,它將嘗試向其對等發現服務器注冊以獲得我們沒有的高可用性本教程。我們沒有發現服務器的多個實例。因此eureka.client.register-with-eureka設置為false。
同樣,我們具有eureka.client.fetch-registry屬性,該屬性指示此客戶端是否應從eureka服務器獲取eureka注冊信息。 并且server.port定義了我們的發現服務器將在其上運行的端口。
spring.application.name=discovery-server eureka.client.register-with-eureka=false eureka.client.fetch-registry=false server.port=8761現在讓我們定義我們的DiscoveryServerApplication。@ EnableEurekaServer將啟用eureka服務器配置。 當我們將此類作為Java程序運行時,它將在http:// localhost:8761 / eureka /處添加新的對等節點,并且我們的微服務將調用該URL進行自身注冊。
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);} }發現服務器就是這樣。 我們的發現服務器已準備就緒,可以接受來自http:// localhost:8761 / eureka上任何服務的注冊請求。
Spring Cloud Eureka服務
發現服務器準備就緒后,現在讓我們創建微服務 。 同樣,這將是spring boot app,我們將使用spring boot starter下載示例項目。
這是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>該模塊將充當微服務,并在啟動時將其自身注冊到發現服務器。為此注冊,我們需要在application.properties配置有關發現服務器的信息。下面是entrys.spring.application.name是唯一標識符對于此服務,eureka.client.service-url.defaultZone是服務光盤服務器的URL。
spring.application.name=eureka-service eureka.client.service-url.defaultZone=http://localhost:8761/eureka server.port=8085要將此應用程序配置為eureka服務和發現服務器的客戶端,我們需要使用@EnableDiscoveryClient注釋我們的spring boot應用程序
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);} }以下是控制器類,我們在其中為客戶端應用程序公開了微服務。
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客戶端
現在是時候定義我們的客戶了,為此,我們將再次使用spring starter生成以下項目。
該客戶端將與eureka服務發現服務器進行交互,并使用eureka客戶端發現服務,然后使用上面我們的服務實現公開的微服務。以下是示例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文件中需要以下條目。 由于這是一個客戶項目,因此我們不希望它注冊到發現服務器。 但是在某些情況下,應用程序既可以是客戶端又可以是服務器。在這種情況下,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注釋,以將該應用程序注冊為發現客戶端。
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);} }現在,我們將定義控制器,它將在根級別公開一個API。 這個API將從發現服務器發現服務并調用服務。在這里,我們已經自動連接了eureka客戶端,并且getNextServerFromEureka()接受兩個參數。 第一個參數是微服務應用程序的服務標識符。 我們上面的服務實現已使用名稱為eureka-service的發現客戶端注冊了自己,并且eureka客戶端應用程序將使用相同的名稱來發現服務。
一旦發現該服務,客戶端將調用微服務。記住,我們在上面的服務實現中公開了一個greeting API,并且客戶端將調用相同的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);} }測試應用
要測試應用程序,請首先啟動發現服務器。 為此,我們需要將DiscoveryServerApplication.java作為Java應用程序運行。 您可以檢查控制臺并找到類似的日志,如下所示。 您還可以在發現服務器公開的控制臺中看到URL http:// localhost:8761 / eureka / ,以注冊服務。
現在,啟動服務,將EurekaServiceApplication.java作為Java應用程序運行。 您還可以運行該服務的多個實例。所有實例都將在發現服務器中注冊。成功注冊該服務后,您將從發現客戶端獲得204響應。
現在,以類似的方式通過將EurekaClientApplication.java作為Java應用程序運行EurekaClientApplication.java啟動客戶端。
現在從URL上輸入URL http:// localhost:8080 ,從eureka服務應用程序中以Hello的形式檢查字符串響應。
Spring Cloud Eureka儀表板
您可能已經在發現服務器實現中的application.properties文件中注意到我們配置的端口為8761。在該端口上,Spring cloud eureka提供了一個默認啟用的儀表板,該儀表板顯示有用的元數據和服務狀態。在這里我們可以檢查關于發現服務器副本的信息(在本例中為1,該副本在localhost上運行)。類似地,我們還具有關于發現服務器的注冊服務的信息以及當前狀態。
結論
在本教程中,我們了解了Spring Cloud netflix eureka的實現。 我們實現了發現服務器,應用程序服務和應用程序客戶端。可以從此處下載源。如果您有任何要添加或共享的內容,請在下面的評論部分中共享。
翻譯自: https://www.javacodegeeks.com/2018/03/spring-cloud-netflix-eureka.html
總結
以上是生活随笔為你收集整理的Spring Cloud Netflix尤里卡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javaml_一些基于Java的AI框架
- 下一篇: spring mvc拆分_Spring集