SpringCloud系列之服務註冊發現(Eureka)應用篇
- 2020 年 3 月 28 日
- 筆記
@
前言
大家好,距離上周發布的配置中心基礎使用已過去差不多一周啦,趁著周末繼續完善後續SpringCloud組件的集成,本次程式碼基於配置中心程式碼的基礎上進行集成。
SpringCloud Config 文章
SpringCloud Config demo01
項目版本
spring-boot-version:2.2.5.RELEASE
spring-cloud.version:Hoxton.SR3
Eureka服務端
首先構建Eureka服務端項目,最近阿里雲開放了自己的項目快速構建平台,那這次就使用下吧。Alibaba initializr 操作基本上和Spirng官方提供的一模一樣。搜索並選擇eureka server即可。
pom主要資訊
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
application.properties
# 服務應用名 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
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
@EnableEurekaServer 申明註解此應用為eureka服務端
項目啟動成功後訪問 http://localhost:9003/,即可看到Eureka服務後台
Eureka客戶端
客戶端程式碼基於上篇SpringCloud配置中心(Config)使用說明,文章地址及程式碼見本文開頭,這邊主要說明一些調整的地方。
先調整spring-cloud-config-server項目,我們需要將其註冊至Eureka服務上,調整如下
1.pom文件
增加eureka客戶端相關依賴
<!--eureka客戶端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
2.application.properties
配置文件增加以下配置項
# eureka服務端地址 eureka.client.serviceUrl.defaultZone=http://localhost:9003/eureka/
3.ConfigServerApplication.java
增加@EnableDiscoveryClient註解標籤
@EnableConfigServer @SpringBootApplication @EnableDiscoveryClient public class ConfigServerApplication
調整完後,我們再啟動Config服務端,這時可以在Eureka服務後台看到config-server已經註冊上了,如下圖。
接著調整spring-cloud-config-client項目
1.pom文件
增加eureka客戶端相關依賴
<!--eureka客戶端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
2.bootstrap.properties
將原先直接通過Config服務端地址調整為基於服務發現的配置,調整如下
# 配置服務端請求地址 #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註解標籤
@SpringBootApplication @EnableDiscoveryClient public class ConfigClientApplication
啟動Config客戶端後,即可在Eureka服務後台看到服務已註冊進來。再訪問下Config 客戶端暴露的介面,http://localhost:9002/getEnv,成功獲取到配置資訊。
服務訪問
前面是基於SprongCloud Config配置中心集成的Eureka,接下來將介紹下如何使用Eureka中已註冊的服務。
這邊先構建一個System模組,用於訪問Config client提供的介面服務。
部分pom資訊
<!--eureka客戶端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--服務訪問--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
application.properties
# 服務應用名稱 spring.application.name=system-server # 服務埠 server.port=9004 # eureka服務端地址 eureka.client.serviceUrl.defaultZone=http://localhost:9003/eureka/
SystemServerApplication.java
@EnableFeignClients開啟Feign的支援
@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") 對應應用服務提供方暴露的介面地址
@FeignClient(name = "config-client") public interface ConfigService { @GetMapping(path = "/getEnv") String getEnvName(); }
SystemController.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 即可訪問到資訊,如下圖
訪問返回結果和訪問 http://localhost:9002/getEnv 介面返回是一樣的,僅僅只是通過Feign訪問了下 http://localhost:9002/getEnv,內部是基於通過註冊在Eureka上的config-client服務調用得到的結果,內部服務地址 http://config-client/getEnv
項目程式碼結構如下