SpringCloud基礎教程(五)-配置中心熱生效和高可用

 個人博客:蘭陵笑笑生,歡迎瀏覽博客!java

 上一章 SpringCloud基礎教程(四)-配置中心入門當中,咱們在對Eureka的有了基本的基礎認識之上,深刻的瞭解Eureka高可用集羣和其餘的生產環境中用到的一些配置。本章將開始瞭解分佈式環境下的配置中心。git

前言

 在實際的項目運行中,咱們會根據實際需求修改配置內容,那麼有沒有一種方式,可以在不啓動服務組件的狀況向讓配置文件動態的生效呢,Spring Cloud Conifg中提供了一種方式了。固然咱們還須要考慮一旦配置服務宕機的話,那麼配置客戶端是沒法獲取到配置信息的,因此針對配置服務,咱們也但願能提供高可用的服務。程序員

1、配置熱生效

 首先咱們在客戶端(每一個開發的微服務)的控制器上添加 @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

 在配置完成以後,咱們經過如下的步驟測試熱生效:api

步驟一:啓動Config Server和Config Client項目訪問。安全

步驟二:訪問http://localhost:9003/get 返回的結果是 「master-test-v1 」;架構

步驟三:修改配置文件ConfigServer-test.properties 內容修改爲」k1=master-test-v2「;提交到git倉庫app

步驟四:訪問http://localhost:9003/get 返回的結果依舊是 「master-test-v1 」;

步驟五:經過POST訪問http://localhost:g003/actuator/refresh 訪問獲得響應【「k1」】,注意這裏的版本是2.x系列的springCloud,和1.X系列的接口訪問不同):

file

第六步:再次去訪問http://localhost:9003/get 返回的結果變成了是 「master-test-v2 」;

 經過以上的配置,咱們成功的測試了手動的請求能夠刷新並動態的加載最新的配置,固然這樣仍是存在一個缺點,就是須要手動刷新。固然SpringCloud中介紹了使用Bus來通知Spring Cloud Config,後期的文章還需繼續生如介紹。

2、高可用

 在上文中,咱們的配置的客戶端都是經過制定配置Config Server的實例地址方式獲取配置信息的,一旦Config Server遇到故障,獲取配置信息就會出現故障,SpringCloud一樣支持經過高可用的方式解決這樣的問題。接下來咱們結合Eureka組件,來搭建高可用的配置中心。

2.1 Config Server配置

 在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:

file

2.二、客戶端配置

 客戶端須要從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/

 經過以上的配置,就能夠實現配置中心的高可用。

3、總結

 本章是對配置中心作了深刻的介紹,包括配置的熱加載和配置服務的高可用,這些都是微服務架構所須要的。Spring Cloud Config功能特別的豐富,不止於此,同時還支持更換git倉庫爲SVN或者其餘的倉庫等,有感興趣的同窗能夠自行研究。

file

.以就是本期的分享,你還能夠關注公衆號: 程序員笑笑生,關注更多精彩內容!

file

file

SpringCloud基礎教程(一)-微服務與SpringCloud

SpringCloud基礎教程(二)-服務發現 Eureka

SpringCloud基礎教程(三)-Eureka進階

SpringCloud 基礎教程(四)-配置中心入門

SpringCloud基礎教程(五)-配置中心熱生效和高可用

SpringCloud 基礎教程(六)-負載均衡Ribbon

更多精彩內容,請期待...

本文由博客一文多發平臺 OpenWrite 發佈!

個人博客地址蘭陵笑笑生,歡迎瀏覽!

相關文章
相關標籤/搜索