SpringCloud系列之服務註冊發現(Eureka)應用篇
阿新 • • 發佈:2020-03-28
@[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