1. 程式人生 > >SpringCloud系列之服務註冊發現(Eureka)應用篇

SpringCloud系列之服務註冊發現(Eureka)應用篇

@[TOC] ## 前言 大家好,距離上週釋出的配置中心基礎使用已過去差不多一週啦,趁著週末繼續完善後續SpringCloud元件的整合,本次程式碼基於配置中心程式碼的基礎上進行整合。 [SpringCloud Config 文章](https://www.cnblogs.com/chinaWu/p/12547992.html) [SpringCloud Config demo01](https://gitee.com/wuyubin/SpringCloudDemo/tree/master/demo01) ## 專案版本 spring-boot-version:**2.2.5.RELEASE** spring-cloud.version:**Hoxton.SR3** ## Eureka服務端 首先構建Eureka服務端專案,最近阿里雲開放了自己的專案快速構建平臺,那這次就使用下吧。[Alibaba initializr](https://start.aliyun.com/) 操作基本上和Spirng官方提供的一模一樣。搜尋並選擇eureka server即可。 pom主要資訊 ```java org.springframework.cloud spring-cloud-starter-netflix-eureka-server ``` application.properties ```java # 服務應用名 spring.application.name=eureka-server # 服務埠 server.port=9003 # 禁止將本服務註冊至eureka eureka.client.register-with-eureka=false # 遮蔽註冊資訊 eureka.client.fetch-registry=false # eureka服務地址 eureka.client.serviceUrl.defaultZone=http://localhost:9003/eureka/ ``` EurekaServerApplication.java ```java @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } } ``` @EnableEurekaServer 申明註解此應用為eureka服務端 專案啟動成功後訪問 http://localhost:9003/,即可看到Eureka服務後臺 ![](https://img2020.cnblogs.com/blog/451497/202003/451497-20200328185357709-775324852.png) ## Eureka客戶端 客戶端程式碼基於上篇SpringCloud配置中心(Config)使用說明,文章地址及程式碼見本文開頭,這邊主要說明一些調整的地方。 先調整spring-cloud-config-server專案,我們需要將其註冊至Eureka服務上,調整如下 1.pom檔案 增加eureka客戶端相關依賴 ```java org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
``` 2.application.properties 配置檔案增加以下配置項 ```java # eureka服務端地址 eureka.client.serviceUrl.defaultZone=http://localhost:9003/eureka/ ``` 3.ConfigServerApplication.java 增加@EnableDiscoveryClient註解標籤 ```java @EnableConfigServer @SpringBootApplication @EnableDiscoveryClient public class ConfigServerApplication ``` 調整完後,我們再啟動Config服務端,這時可以在Eureka服務後臺看到config-server已經註冊上了,如下圖。 ![](https://img2020.cnblogs.com/blog/451497/202003/451497-20200328185442049-1514375962.png) 接著調整spring-cloud-config-client專案 1.pom檔案 增加eureka客戶端相關依賴 ```java org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
``` 2.bootstrap.properties 將原先直接通過Config服務端地址調整為基於服務發現的配置,調整如下 ```java # 配置服務端請求地址 #spring.cloud.config.uri=http://localhost:9001/ # 開啟服務發現 spring.cloud.config.discovery.enabled=true # 配置Config服務應用名稱 spring.cloud.config.discovery.service-id=config-server ``` 3.ConfigClientApplication.java 增加@EnableDiscoveryClient註解標籤 ```java @SpringBootApplication @EnableDiscoveryClient public class ConfigClientApplication ``` 啟動Config客戶端後,即可在Eureka服務後臺看到服務已註冊進來。再訪問下Config 客戶端暴露的介面,http://localhost:9002/getEnv,成功獲取到配置資訊。 ![](https://img2020.cnblogs.com/blog/451497/202003/451497-20200328185500571-1799810695.png) ## 服務訪問 前面是基於SprongCloud Config配置中心整合的Eureka,接下來將介紹下如何使用Eureka中已註冊的服務。 這邊先構建一個System模組,用於訪問Config client提供的介面服務。 部分pom資訊 ```java org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud spring-cloud-starter-openfeign ``` application.properties ```java # 服務應用名稱 spring.application.name=system-server # 服務埠 server.port=9004 # eureka服務端地址 eureka.client.serviceUrl.defaultZone=http://localhost:9003/eureka/ ``` SystemServerApplication.java @EnableFeignClients開啟Feign的支援 ```java @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class SystemServerApplication { public static void main(String[] args) { SpringApplication.run(SystemServerApplication.class, args); } } ``` ConfigService.java @FeignClient 申明Feign客戶端資訊,其中name對應應用服務提供方的應用服務名稱 @GetMapping(path = "/getEnv") 對應應用服務提供方暴露的介面地址 ```java @FeignClient(name = "config-client") public interface ConfigService { @GetMapping(path = "/getEnv") String getEnvName(); } ``` SystemController.java ```java @RestController @RequestMapping(value = "/web/system") public class SystemController { @Autowired ConfigService configService; @RequestMapping(value = "/getEnvName", method = RequestMethod.GET) public String getEnvName() { return configService.getEnvName(); } } ``` 啟動系統服務模組後,訪問 http://localhost:9004/web/system/getEnvName 即可訪問到資訊,如下圖 ![](https://img2020.cnblogs.com/blog/451497/202003/451497-20200328185531439-183336341.png) 訪問返回結果和訪問 http://localhost:9002/getEnv 介面返回是一樣的,僅僅只是通過Feign訪問了下 http://localhost:9002/getEnv,內部是基於通過註冊在Eureka上的config-client服務呼叫得到的結果,內部服務地址 http://config-client/getEnv 專案程式碼結構如下 ![](https://img2020.cnblogs.com/blog/451497/202003/451497-20200328192152314-1324220992.png) ![](https://img2020.cnblogs.com/blog/451497/202003/451497-20200328192309728-1266965141.png) [本次示例程式碼地址](https://gitee.com/wuyubin/SpringCloudDemo/tree/master