SpringCloud-微服務配置統一管理SpringCloud Config(七)

前言:對於應用,配製文件一般是放在項目中管理的,它可能有spring、mybatis、log等等各類各樣的配置文件和屬性文件,另外你還可能有開發環境、測試環境、生產環境等,這樣的話就得一式三份,如果傳統應用還好說,若是是微服務呢,這樣不光配置文件有可能冗餘並且量大,繁重複雜,很差維護,這樣的話就須要一個配置文件的統一管理了。html

1、SpringCloud Config簡介

  SpringCloud Config爲分佈式系統外部化配置提供了服務器端和客戶端的支持,它包括ConfigServer和ConfigClient兩部分。git

    

  Server:web

  • 實例通常多於兩個,以實現HA;
  • 配置以文件形式存儲,快速支持目前以SpringBoot的開發方式的配置文件;
  • 支持GIt,碼雲,SVN,本地文件等多種形式;
  • 支持屬性加密;

  Client:即各自的微服務應用;spring

  使用SpringCloud BUS配置和藉助Git倉庫的WebHooks自動刷新;bootstrap

2、SpringCloud Config基本使用

建立服務端:安全

  一、前面簡單介紹了一下Config,那麼首先要作的準備是先到Git倉庫或者碼雲中建立一個項目並新建一些配置文件 spring-cloud-repo服務器

  

  二、建立Maven工程 config-server,添加依賴:mybatis

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-config-server</artifactId>
    </dependency>

   三、建立啓動類,並加上開啓Config服務端註解@EnableConfigServer:架構

@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication.class, args);
    }

}

  四、添加application屬性文件:併發

server.port=9000
spring.application.name=config-server-9000
spring.cloud.config.server.git.uri=https://gitee.com/lfalex/spring-cloud-repo

  五、啓動項目,簡單測試,訪問:localhost:9000/application/dev,localhost:9000/application-dev.properties:

    訪問規則:

      /{appication}/{profile}/[{label}]

      /{application}-{profile}.yml

      /{application}-{profile}.properties

      /{label}/{application}-{profile}.properties

      /{label}/{application}-{profile}.yml

    它們均可以映射到對應的配置文件{application}-{profile}.properties,其中{label}爲具體的分支,默認爲master;

  

  

建立客戶端(通常爲具體的微服務):

  一、建立Maven項目 config-client,添加依賴:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 實現Config的客戶端配置 -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <!-- 實現經過端點refresh手動刷新 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

  二、建立通常啓動類便可,無需添加註解,建立Controller,爲測試作準備:

    @Value("${version}")
    private String version;

    @RequestMapping("/getVersion")
    public String getVersion() {
        return this.version;
    }

   三、爲了更明顯的測試Config是否生效,在application配置文件中添加:

server.port=9001

  四、添加bootstrap.properties配置文件,bootstrap.properties爲默認文件名,在springcloud中配置文件有個優先級的概念,當本地application.properties文件和bootstrap.properties文件中配置了一樣的屬性不一樣的值,因爲bootstrap的優先級高,則在bootstrap中的屬性不會被application中的覆蓋,反而會覆蓋掉application中的配置:

#對應着config server所獲取配置文件的{application}和URL
spring.application.name=application
spring.cloud.config.uri=http://localhost:9000/
#對應着文件後面的後綴{profile}
spring.cloud.config.profile=dev
#分支
spring.cloud.config.label=master

  五、先啓動服務器,再啓動客戶端,觀察端口和頁面,因爲前面在application中添加了端口爲9001,而遠程倉庫的配置文件中也添加了端口9999:

  

  

 這樣就實現了基本的遠程配置倉庫了,可是一旦有文件更改還得從新啓動項目,這樣就頗有問題了,因此須要刷新,使用/refresh端點刷新:

  一、在application或遠程文件中添加:

#因爲要使用actuator,因此必需要將安全權限關閉
management.security.enabled=false

  二、在controller上添加註解@RefreshScope註解:

@RestController
@RefreshScope       //非重啓項目手動刷新配置註解
public class ConfigController {
      。。。。      
}

  三、啓動測試,打開,修改version=dev-3.0.0爲version=dev-4.0.0,併發送刷新請求http://localhost:9999/refresh,刷新測試頁面查看:

  

  

  

3、SpringCloud Bus自動刷新配置

  前面的基於端點刷新,只針對一個服務,若爲多個微服務,這樣就很繁瑣,因此須要一個能夠集體刷新或指定刷新的組件=》SpringCloud Bus;

  一、使用SpringCloud Bus須要使用RabbitMQ,未安裝的請安裝,基於以前的端點刷新的項目,添加依賴:

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>

  二、在bootstrap中增長RabbitMQ的配置:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

  三、啓動 config-bus-client測試,打開,修改version=dev-3.0.0爲version=dev-4.0.0,併發送刷新請求http://localhost:9999/bus/refresh,刷新測試頁面查看:

  

  

  

  

  還能夠經過Git或者碼雲的WebHooks來發送修改刷新配置請求:

  

 

 

 

 

參考書籍:《SpringCloud與Docker微服務架構實戰》周力著

代碼示例:https://gitee.com/lfalex/springcloud-example config-server config-client config-bus-client

相關文章
相關標籤/搜索