上一篇文章,講了SpringCloudConfig
整合Git
倉庫,這一篇我們講一下SpringCloudConfig
配和 Eureka
註冊中心一起使用
在分散式系統中,由於服務數量巨多,為了方便服務配置檔案統一管理,實時更新,所以需要分散式配置中心元件。在Spring Cloud
中,有分散式配置中心元件spring cloud config
,它支援配置服務放在配置服務的記憶體中(即本地),也支援放在遠端Git
倉庫中。在spring cloud config
元件中,分兩個角色,一是config server
,二是config client
,業界也有些知名的同類開源產品,比如百度的disconf
。
相比較同類產品,SpringCloudConfig
最大的優勢是和Spring
無縫整合,支援Spring
裡面Environment
和PropertySource
的介面,對於已有的pring
應用程式的遷移成本非常低,在配置獲取的介面上是完全一致,結合SpringBoot
可使你的專案有更加統一的標準(包括依賴版本和約束規範),避免了應為整合不同開軟體源造成的依賴版本衝突。
準備工作
我們先拿之前的程式碼為基礎,進行下面的操作
Spring Cloud(四) 服務提供者 Eureka + 服務消費者 Feign
Eureka Service
匯入第四篇文章中的專案:作為服務註冊中心
spring-cloud-eureka-service
Eureka Provider
匯入第四篇文章中的專案:作為服務的提供者
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
Eureka Consumer
匯入第四篇文章中的專案:作為服務的消費者
spring-cloud-feign-consumer
服務端配置
Config Server
複製上一篇的專案 spring-cloud-config-server
,新增 eureka
依賴
新增依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
複製程式碼
開啟服務註冊
在程式的啟動類 ConfigServerApplication.java
通過 @EnableEurekaClient
開啟 Eureka
提供者服務
package io.ymq.example.config.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
複製程式碼
修改配置
修改配置檔案 application.properties
,新增 eureka
註冊中心地址 http://localhost:8761/eureka/
spring.application.name=config-server
server.port=8888
spring.cloud.config.label=master
spring.cloud.config.server.git.uri=https://github.com/souyunku/spring-cloud-config.git
spring.cloud.config.server.git.search-paths=spring-cloud-config
#spring.cloud.config.server.git.username=your username
#spring.cloud.config.server.git.password=your password
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
複製程式碼
-
spring.cloud.config.server.git.uri:
配置git
倉庫地址 -
spring.cloud.config.server.git.searchPaths:
配置倉庫路徑 -
spring.cloud.config.label:
配置倉庫的分支 -
spring.cloud.config.server.git.username:
訪問git
倉庫的使用者名稱 -
spring.cloud.config.server.git.password:
訪問git
倉庫的使用者密碼 -
eureka.client.serviceUrl.defaultZone:eureka
註冊中心地址
Git倉庫如果是私有倉庫需要填寫使用者名稱密碼,示例是公開倉庫,所以不配置密碼。
遠端Git倉庫
spring-cloud-config
資料夾下有 application-dev.properties
,application-test.properties
三個檔案,內容依次是:content=hello dev
,content=hello test
,content=hello pre
測試服務
啟動程式 ConfigServerApplication
類
訪問 Config Server
服務:http://localhost:8888/springCloudConfig/dev/master
{
"name": "springCloudConfig",
"profiles": [
"dev"
],
"label": "master",
"version": "b6fbc2f77d1ead41d5668450e2601a03195eaf16",
"state": null,
"propertySources": [
{
"name": "https://github.com/souyunku/spring-cloud-config.git/application-dev.properties",
"source": {
"content": "hello dev"
}
}
]
}
複製程式碼
證明配置服務中心可以從遠端程式獲取配置資訊。
http請求地址和資原始檔對映如下:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
客戶端端配置
config Client Eureka
修改已經匯入的,第四篇文章中的專案:配置客戶端的一些配置
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
新增依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
複製程式碼
開啟服務註冊
在程式的啟動類 EurekaProviderApplication
,通過 @Value
獲取服務端的 content
值的內容
package io.ymq.example.eureka.provider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaProviderApplication {
@Value("${content}")
String content;
@Value("${server.port}")
String port;
@RequestMapping("/")
public String home() {
return "Hello world ,port:" + port+",content="+content;
}
public static void main(String[] args) {
SpringApplication.run(EurekaProviderApplication.class, args);
}
}
複製程式碼
新增配置
修改配置檔案 application.properties
新增 Eureka
註冊中心,配置從springCloudConfig
配置中心讀取配置,指定springCloudConfigService
服務名稱
spring.application.name=eureka-provider
server.port=8081
spring.cloud.config.label=master
spring.cloud.config.profile=dev
#spring.cloud.config.uri=http://localhost:8888/
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
複製程式碼
-
spring.cloud.config.label
指明遠端倉庫的分支 -
spring.cloud.config.profile
-
dev
開發環境配置檔案 -
test
測試環境 -
pro
正式環境 -
#spring.cloud.config.uri= http://localhost:8888/
指明配置服務中心的網址**(註釋掉)** -
spring.cloud.config.discovery.enabled=true
是從配置中心讀取檔案。 -
spring.cloud.config.discovery.serviceId=config-server
配置中心的servieId
,服務名稱,通過服務名稱去Eureka
註冊中心找服務
測試服務
依次啟動專案:
spring-cloud-eureka-service
spring-cloud-config-server
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
spring-cloud-feign-consumer
啟動該工程後,訪問服務註冊中心,檢視服務是否都已註冊成功:http://localhost:8761/
檢視 eureka 監控,看服務是否都註冊成功
命令視窗,通過curl http://127.0.0.1:9000/hello
訪問服務,或者在瀏覽器訪問http://127.0.0.1:9000/hello
F5 重新整理
修改了Git倉庫的配置後,需要重啟服務,才可以得到最新的配置,下一篇講怎麼解決配置的更新
原始碼下載
GitHub:github.com/souyunku/sp…
Contact
- 作者:鵬磊
- 出處:www.ymq.io
- Email:admin@souyunku.com
- 版權歸作者所有,轉載請註明出處
- Wechat:關注公眾號,搜雲庫,專注於開發技術的研究與知識分享