個人博客:蘭陵笑笑生,歡迎瀏覽博客!java
上一章 SpringCloud基礎教程(四)-配置中心入門當中,咱們在對Eureka的有了基本的基礎認識之上,深刻的瞭解Eureka高可用集羣和其餘的生產環境中用到的一些配置。本章將開始瞭解分佈式環境下的配置中心。git
在實際的項目運行中,咱們會根據實際需求修改配置內容,那麼有沒有一種方式,可以在不啓動服務組件的狀況向讓配置文件動態的生效呢,Spring Cloud Conifg中提供了一種方式了。固然咱們還須要考慮一旦配置服務宕機的話,那麼配置客戶端是沒法獲取到配置信息的,因此針對配置服務,咱們也但願能提供高可用的服務。程序員
首先咱們在客戶端(每一個開發的微服務)的控制器上添加 @RefreshScope 註解,並在客戶端(項目的pom.xml中引入actuator依賴(actuator中包含了/actuator/refresh的api):web
@RefreshScope @RestController public class ValueController { @Value("${k1}") String value; @GetMapping("/get") public String getValue(){ return value; } }
親自測試,若是將@RefreshScope註解添加在啓動類上,value是無論用的,只有添加在須要熱加載的Bean上才生效。spring
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
修改bootstrap.xml 添加以下配置,表示能夠經過手動的刷新改變獲取配置信息bootstrap
management: endpoints: enabled-by-default: true web: exposure: include: refresh
在配置完成以後,咱們經過如下的步驟測試熱生效:segmentfault
步驟一:啓動Config Server和Config Client項目訪問。api
步驟二:訪問http://localhost:9003/get 返回的結果是 「master-test-v1 」;安全
步驟三:修改配置文件ConfigServer-test.properties 內容修改爲」k1=master-test-v2「;提交到git倉庫架構
步驟四:訪問http://localhost:9003/get 返回的結果依舊是 「master-test-v1 」;
步驟五:經過POST訪問http://localhost:g003/actuator/refresh 訪問獲得響應【「k1」】,注意這裏的版本是2.x系列的springCloud,和1.X系列的接口訪問不同):
第六步:再次去訪問http://localhost:9003/get 返回的結果變成了是 「master-test-v2 」;
經過以上的配置,咱們成功的測試了手動的請求能夠刷新並動態的加載最新的配置,固然這樣仍是存在一個缺點,就是須要手動刷新。固然SpringCloud中介紹了使用Bus來通知Spring Cloud Config,後期的文章還需繼續生如介紹。
在上文中,咱們的配置的客戶端都是經過制定配置Config Server的實例地址方式獲取配置信息的,一旦Config Server遇到故障,獲取配置信息就會出現故障,SpringCloud一樣支持經過高可用的方式解決這樣的問題。接下來咱們結合Eureka組件,來搭建高可用的配置中心。
在Config Server的項目中添加Eureka的依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
並在ConfigServerApplicaition.Java啓動類添加註解@EnableEurekaClient 開啓Eureka註冊:
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; @SpringBootApplication @EnableConfigServer @EnableEurekaClient public class ConfigServerApplicaition { public static void main(String[] args) { SpringApplication.run(ConfigServerApplicaition.class, args); } }
修改Config Server的applicaiton.xml配置:修改端口號和實例Id,啓動2個Config Server實例:
server: port: 6001 #服務提供方 spring: application: #服務的名稱 name: server-config-cluster cloud: config: server: git: uri: https://gitee.com/lnxxs/springCloudConfig.git password: username: #git非植 label: master uri: http://localhost:6001/ enabled: true #http安全 security: user: name: user password: pwd #註冊的實實例 eureka: instance: instance-id: config-server1 client: service-url: #鏈接eureka的url defaultZone: http://eureka7001.com:7001/eureka/
在Eureka的監控中心,咱們看到了名稱爲server-config-cluster的實例有2個,分別是config-server1和
config-server2:
客戶端須要從Eureka獲取Config Server的地址,首先在客戶端的項目pom.xml中添加Eureka的依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
啓動類添加@EnableDiscoveryClient註解,啓動開發服務發現的功能,發現Config Server配置服務信息:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableAutoConfiguration @EnableDiscoveryClient public class ConfigClientApplication { public static void main(String[] args) { SpringApplication.run(ConfigClientApplication.class, args); } }
同時在bootstrap.xml洗澡呢Eureka註冊中心的地址配置,同時將spring.cloud.config.uri去掉,打開spring.cloud.config.discover.enabled=ture ,並添加spring.cloud.config.service-id爲配置服務的spring.application.name= server-config-cluster,具體配置以下:
spring: application: name: server-client cloud: config: label: master profile: test #修改uri爲 discovery.service-id #uri: http://localhost:6001/ name: ConfigServer fail-fast: true retry: initial-interval: 1000 max-attempts: 6 max-interval: 2000 multiplier: 1.1 username: user password: pwd discovery: service-id: server-config-cluster enabled: true management: endpoints: enabled-by-default: true web: exposure: include: refresh eureka: instance: instance-id: config-client client: service-url: #鏈接eureka的url defaultZone: http://eureka7001.com:7001/eureka/
經過以上的配置,就能夠實現配置中心的高可用。
本章是對配置中心作了深刻的介紹,包括配置的熱加載和配置服務的高可用,這些都是微服務架構所須要的。Spring Cloud Config功能特別的豐富,不止於此,同時還支持更換git倉庫爲SVN或者其餘的倉庫等,有感興趣的同窗能夠自行研究。
.以就是本期的分享,你還能夠關注公衆號: 程序員笑笑生,關注更多精彩內容!
SpringCloud基礎教程(一)-微服務與SpringCloud
SpringCloud基礎教程(二)-服務發現 Eureka
SpringCloud基礎教程(五)-配置中心熱生效和高可用
SpringCloud 基礎教程(六)-負載均衡Ribbon
更多精彩內容,請期待...
本文由博客一文多發平臺 OpenWrite 發佈!
個人博客[蘭陵笑笑生] ( http://www.hao127.com.cn/),歡...!