上一篇文章,講了SpringCloudConfig
集成Git
倉(cāng)庫(kù),這一篇我們講一下SpringCloudConfig
配和 Eureka
注冊(cè)中心一起使用
在分布式系統(tǒng)中,由于服務(wù)數(shù)量巨多,為了方便服務(wù)配置文件統(tǒng)一管理,實(shí)時(shí)更新,所以需要分布式配置中心組件。在Spring Cloud
中,有分布式配置中心組件spring cloud config
,它支持配置服務(wù)放在配置服務(wù)的內(nèi)存中(即本地),也支持放在遠(yuǎn)程Git
倉(cāng)庫(kù)中。在spring cloud config
組件中,分兩個(gè)角色,一是config server
,二是config client
,業(yè)界也有些知名的同類(lèi)開(kāi)源產(chǎn)品,比如百度的disconf
。
相比較同類(lèi)產(chǎn)品,SpringCloudConfig
最大的優(yōu)勢(shì)是和Spring
無(wú)縫集成,支持Spring
里面Environment
和PropertySource
的接口,對(duì)于已有的pring
應(yīng)用程序的遷移成本非常低,在配置獲取的接口上是完全一致,結(jié)合SpringBoot
可使你的項(xiàng)目有更加統(tǒng)一的標(biāo)準(zhǔn)(包括依賴(lài)版本和約束規(guī)范),避免了應(yīng)為集成不同開(kāi)軟件源造成的依賴(lài)版本沖突。
我們先拿之前的代碼為基礎(chǔ),進(jìn)行下面的操作
Spring Cloud(四) 服務(wù)提供者 Eureka + 服務(wù)消費(fèi)者 Feign
http://www.ymq.io/2017/12/06/spring-cloud-feign/
導(dǎo)入第四篇文章中的項(xiàng)目:作為服務(wù)注冊(cè)中心
spring-cloud-eureka-service
導(dǎo)入第四篇文章中的項(xiàng)目:作為服務(wù)的提供者
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
導(dǎo)入第四篇文章中的項(xiàng)目:作為服務(wù)的消費(fèi)者
spring-cloud-feign-consumer
復(fù)制上一篇的項(xiàng)目 spring-cloud-config-server
,添加 eureka
依賴(lài)
https://github.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-config/
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
在程序的啟動(dòng)類(lèi) ConfigServerApplication.java
通過(guò) @EnableEurekaClient
開(kāi)啟 Eureka
提供者服務(wù)
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
注冊(cè)中心地址 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
倉(cāng)庫(kù)地址spring.cloud.config.server.git.searchPaths:
配置倉(cāng)庫(kù)路徑spring.cloud.config.label:
配置倉(cāng)庫(kù)的分支spring.cloud.config.server.git.username:
訪(fǎng)問(wèn)git
倉(cāng)庫(kù)的用戶(hù)名spring.cloud.config.server.git.password:
訪(fǎng)問(wèn)git
倉(cāng)庫(kù)的用戶(hù)密碼
eureka.client.serviceUrl.defaultZone:eureka
注冊(cè)中心地址Git倉(cāng)庫(kù)如果是私有倉(cāng)庫(kù)需要填寫(xiě)用戶(hù)名密碼,示例是公開(kāi)倉(cāng)庫(kù),所以不配置密碼。
spring-cloud-config
文件夾下有 application-dev.properties
,application-test.properties
三個(gè)文件,內(nèi)容依次是:content=hello dev
,content=hello test
,content=hello pre
啟動(dòng)程序 ConfigServerApplication
類(lèi)
訪(fǎng)問(wèn) Config Server
服務(wù):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"
}
}
]
}
證明配置服務(wù)中心可以從遠(yuǎn)程程序獲取配置信息。
http請(qǐng)求地址和資源文件映射如下:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
修改已經(jīng)導(dǎo)入的,第四篇文章中的項(xiàng)目:配置客戶(hù)端的一些配置
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>
在程序的啟動(dòng)類(lèi) EurekaProviderApplication
,通過(guò) @Value
獲取服務(wù)端的 content
值的內(nèi)容
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
注冊(cè)中心,配置從springCloudConfig
配置中心讀取配置,指定springCloudConfigService
服務(wù)名稱(chēng)
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
指明遠(yuǎn)程倉(cāng)庫(kù)的分支spring.cloud.config.profile
dev
開(kāi)發(fā)環(huán)境配置文件test
測(cè)試環(huán)境pro
正式環(huán)境#spring.cloud.config.uri= http://localhost:8888/
指明配置服務(wù)中心的網(wǎng)址(注釋掉)
spring.cloud.config.discovery.enabled=true
是從配置中心讀取文件。spring.cloud.config.discovery.serviceId=config-server
配置中心的servieId
,服務(wù)名稱(chēng),通過(guò)服務(wù)名稱(chēng)去 Eureka
注冊(cè)中心找服務(wù)
依次啟動(dòng)項(xiàng)目:
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
啟動(dòng)該工程后,訪(fǎng)問(wèn)服務(wù)注冊(cè)中心,查看服務(wù)是否都已注冊(cè)成功:http://localhost:8761/
查看 eureka 監(jiān)控,看服務(wù)是否都注冊(cè)成功
命令窗口,通過(guò)curl http://127.0.0.1:9000/hello
訪(fǎng)問(wèn)服務(wù),或者在瀏覽器訪(fǎng)問(wèn)http://127.0.0.1:9000/hello
F5 刷新
修改了Git倉(cāng)庫(kù)的配置后,需要重啟服務(wù),才可以得到最新的配置,下一篇講怎么解決配置的更新
GitHub:https://github.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-config-eureka
碼云:https://gitee.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-config-eureka
Wechat:關(guān)注公眾號(hào),搜云庫(kù)技術(shù)團(tuán)隊(duì),專(zhuān)注于開(kāi)發(fā)技術(shù)的研究與知識(shí)分享
更多建議: