springcloud微服務實戰 學習筆記四 分散式配置中心

zhumeilu發表於2017-12-14

####介紹 Spring Cloud Config是Spring Cloud團隊建立的一個全新專案,用來為分散式系統中的基礎設施和微服務應用提供集中化的外部配置支援,它分為服務端與客戶端兩個部分。其中服務端也稱為分散式配置中心,它是一個獨立的微服務應用,用來連線配置倉庫併為客戶端提供獲取配置資訊、加密/解密資訊等訪問介面;而客戶端則是微服務架構中的各個微服務應用或基礎設施,它們通過指定的配置中心來管理應用資源與業務相關的配置內容,並在啟動的時候從配置中心獲取和載入配置資訊。Spring Cloud Config實現了對服務端和客戶端中環境變數和屬性配置的抽象對映,所以它除了適用於Spring構建的應用程式之外,也可以在任何其他語言執行的應用程式中使用。由於Spring Cloud Config實現的配置中心預設採用Git來儲存配置資訊,所以使用Spring Cloud Config構建的配置伺服器,天然就支援對微服務應用配置資訊的版本管理,並且可以通過Git客戶端工具來方便的管理和訪問配置內容。當然它也提供了對其他儲存方式的支援,比如:SVN倉庫、本地化檔案系統。 ####依賴

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
複製程式碼

####配置檔案

    spring.application.name=config-server
    server.port=1201

    # git倉庫配置
    spring.cloud.config.server.git.uri=https://github.com/zhumeilu/springcloud-config-repo-demo/
    #spring.cloud.config.server.git.searchPaths=Chapter1-1-8/config-repo
    spring.cloud.config.server.git.username=
    spring.cloud.config.server.git.password=
複製程式碼

####Application.java

    @EnableConfigServer  //開啟配置中心服務
    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            new SpringApplicationBuilder(Application.class).web(true).run(args);
        }
    
    }
複製程式碼
  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

{label}對應Git上不同的分支,預設為master,{application}為配置的檔名稱,{profile}為環境 訪問http://localhost:1201/config-client/dev/master就可以看到配置檔案了

###客戶端

構建一個簡單的springboot應用 配置檔案

    spring.application.name=eureka-consumer
    server.port=4444
    eureka.instance.hostname=localhost
    #服務註冊中心
    #eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
    spring.cloud.config.profile=dev
    spring.cloud.config.name=config-client
    spring.cloud.config.uri=http://localhost:1201/
    spring.cloud.config.label=master
複製程式碼

在controller中新增

@Value("${from}")
String from;
@GetMapping("/getFrom")
public String getFrom(){
    return from;
}
複製程式碼

訪問http://localhost:4444/getForm 得到配置檔案中的form的值

在客戶端使用配置中心時,spring.cloud.config.name和spring.application.name都可以確定配置檔名稱,最好使用spring.cloud.config.name=config-client來確定配置檔名稱,不要使用spring.application.name=config-client來確定。如果都存在的話,預設使用spring.cloud.config.name

###配置中心叢集 將多個配置中心註冊為服務,使其實現叢集和負載均衡 ####服務端

依賴 在之前的基礎上新增依賴

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
複製程式碼

配置檔案 在之前的基礎上新增註冊中心

# 配置服務註冊中心
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
複製程式碼

Application.java

新增註解@EnableDiscoveryClient //註解使其成為服務

####客戶端

配置檔案 在原來的基礎是新增

#開啟通過服務來訪問Config Server的功能
spring.cloud.config.discovery.enabled=true
#指定Config Server註冊的服務名
spring.cloud.config.discovery.serviceId=config-server
複製程式碼

當git上的配置檔案更新時,可以在專案中新增spring-boot-starter-actuator模組,在需要重新整理的controller上新增註解@RefreshScope然後訪問/refresh,需要注意的是springboot中預設開啟安全策略,無法通過fidder或者postman之類的工具呼叫/refresh,所以需要設定management.security.enabled= false

相關文章