
本指南將引導您完成啟動和使用 Netflix Eureka 服務注冊表的過程。
(資料圖片僅供參考)
您將設置一個Netflix 尤里卡服務注冊表然后生成一個客戶端,該客戶端既向注冊表注冊自身,又使用它來解析自己的主機。服務注冊表非常有用,因為它支持客戶端負載平衡,并將服務提供商與使用者分離,而無需 DNS。
像大多數(shù)春天一樣入門指南,您可以從頭開始并完成每個步驟,也可以繞過您已經熟悉的基本設置步驟。無論哪種方式,您最終都會得到工作代碼。
要從頭開始,請繼續(xù)從 Spring 初始化開始.
要跳過基礎知識,請執(zhí)行以下操作:
下載?并解壓縮本指南的源存儲庫,或使用吉特:git clonehttps://github.com/spring-guides/gs-service-registration-and-discovery.git
光盤成gs-service-registration-and-discovery/initial
跳轉到啟動尤里卡服務注冊表.完成后,您可以根據(jù) 中的代碼檢查結果。??gs-service-registration-and-discovery/complete?
?
對于所有 Spring 應用程序,您應該從Spring Initializr.Initializr 提供了一種快速的方式來提取應用程序所需的所有依賴項,并為您完成大量設置。
本指南需要兩個應用程序。第一個應用程序(服務應用程序)只需要 Eureka 服務器依賴項。
第二個應用程序(客戶端應用程序)需要 Eureka Server 和 Eureka Discovery Client 依賴項。
為方便起見,我們在項目頂部(和目錄上方的一個目錄)提供了構建文件(文件和文件),您可以使用這些文件同時構建兩個項目。我們還在那里添加了Maven和Gradle包裝器。? |
你可以使用這個預初始化項目(對于服務應用程序)或此預初始化項目(對于客戶端應用程序),然后單擊生成以下載 ZIP 文件。此項目配置為適合本教程中的示例。
手動初始化項目:
導航到https://start.spring.io.此服務拉入應用程序所需的所有依賴項,并為您完成大部分設置。選擇 Gradle 或 Maven 以及您要使用的語言。本指南假定您選擇了 Java。單擊依賴關系,然后為服務應用程序選擇Eureka 服務器,為客戶端應用程序選擇Eureka 服務器和Eureka 發(fā)現(xiàn)客戶端。單擊生成。下載生成的 ZIP 文件,該文件是配置了您選擇的 Web 應用程序的存檔。如果您的 IDE 集成了 Spring Initializr,則可以從 IDE 完成此過程。 |
您也可以從 Github 分叉項目,然后在 IDE 或其他編輯器中打開它。 |
您首先需要一個尤里卡服務注冊表。您可以使用Spring Cloud來建立其他應用程序可以與之通信的注冊表。這是一個常規(guī)的 Spring 引導應用程序,添加了一個注釋 () 以啟用服務注冊表。以下清單(來自 )顯示了服務應用程序:??@EnableEurekaServer?
???@EnableEurekaServer?
???eureka-service/src/main/java/com.example.serviceregistrationanddiscoveryservice/ServiceRegistrationAndDiscoveryServiceApplication.java?
?
package com.example.serviceregistrationanddiscoveryservice;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer@SpringBootApplicationpublic class ServiceRegistrationAndDiscoveryServiceApplication { public static void main(String[] args) { SpringApplication.run(ServiceRegistrationAndDiscoveryServiceApplication.class, args); }}
當注冊表啟動時,它將抱怨(使用堆棧跟蹤)注冊表可以連接到的副本節(jié)點。在生產環(huán)境中,您將需要注冊表的多個實例。但是,出于我們的簡單目的,禁用相關日志記錄就足夠了。
默認情況下,注冊表還會嘗試注冊自身,因此您還需要禁用該行為。
在本地使用此注冊表時,將此注冊表放在單獨的端口上是一個很好的約定。
添加一些屬性以處理所有這些要求,如以下清單所示:??eureka-service/src/main/resources/application.properties?
?
server.port=8761eureka.client.register-with-eureka=falseeureka.client.fetch-registry=falselogging.level.com.netflix.eureka=OFFlogging.level.com.netflix.discovery=OFF
現(xiàn)在,您已經啟動了一個服務注冊表,您可以建立一個客戶端,該客戶端既向注冊表注冊自身,又使用 Spring Cloud 抽象來查詢注冊表中是否有自己的主機和端口。激活Netflix Eureka實施。(其他服務注冊表還有其他實現(xiàn),例如??DiscoveryClient?
???@EnableDiscoveryClient?
???DiscoveryClient?
?橋公司領事或阿帕奇動物園管理員).以下清單(來自 )顯示了客戶端應用程序:??eureka-client/src/main/java/example/serviceregistrationanddiscoveryclient/ServiceRegistrationAndDiscoveryClientApplication.java?
?
package com.example.serviceregistrationanddiscoveryclient;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.ServiceInstance;import org.springframework.cloud.client.discovery.DiscoveryClient;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@SpringBootApplicationpublic class ServiceRegistrationAndDiscoveryClientApplication { public static void main(String[] args) { SpringApplication.run(ServiceRegistrationAndDiscoveryClientApplication.class, args); }}@RestControllerclass ServiceInstanceRestController { @Autowired private DiscoveryClient discoveryClient; @RequestMapping("/service-instances/{applicationName}") public ListserviceInstancesByApplicationName( @PathVariable String applicationName) { return this.discoveryClient.getInstances(applicationName); }}
無論選擇哪種實現(xiàn),您都應該很快看到以您在屬性中指定的任何名稱注冊。此屬性在 Spring Cloud 中大量使用,通常在服務配置的最早階段。此屬性用于服務引導程序,因此,按照慣例,此屬性位于之前找到它的位置。以下清單顯示了該文件:??eureka-client?
???spring.application.name?
???eureka-client/src/main/resources/bootstrap.properties?
???src/main/resources/application.properties?
???bootstrap.properties?
?
Unresolved directive in- include::complete/eureka-client/src/main/resources/bootstrap.properties[]
定義了一個Spring MVC REST端點(),該端點返回所有已注冊實例的枚舉。請參閱的??eureka-client?
???ServiceInstanceRestController?
???ServiceInstance?
???http://localhost:8080/service-instances/a-bootiful-client?
?構建一個 RESTful Web 服務了解有關使用 Spring MVC 和 Spring Boot 構建 REST 服務的更多信息的指南。
通過啟動第一個來測試端到端結果,然后在加載后啟動 .??eureka-service?
???eureka-client?
?
要使用 Maven 運行 Eureka 服務,請在終端窗口(在目錄中)中運行以下命令:??/complete?
?
./mvnw spring-boot:run -pl eureka-service
要使用 Maven 運行 Eureka 客戶端,請在終端窗口(在目錄中)中運行以下命令:??/complete?
?
./mvnw spring-boot:run -pl eureka-client
要使用 Gradle 運行 Eureka 服務,請在終端窗口(在目錄中)中運行以下命令:??/complete?
?
./gradlew :eureka-service:bootRun
要使用 Gradle 運行 Eureka 客戶端,請在終端窗口(在目錄中)中運行以下命令:??/complete?
?
./gradlew :eureka-client:bootRun
在注冊表中注冊自身并從注冊表刷新其自己的已注冊實例列表大約需要一分鐘。在瀏覽器中訪問 。在那里,您應該看到響應中反映的 for 。如果看到空元素,請稍等片刻,然后刷新頁面。??eureka-client?
???eureka-client?
???http://localhost:8080/service-instances/a-bootiful-client?
???ServiceInstance?
???eureka-client?
???
??
祝賀!您剛剛使用Spring建立了Netflix Eureka服務注冊表,并在客戶端應用程序中使用該注冊表。