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
項目代碼結構如下

本次示例代碼地址