天天看點

SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考

目錄

  • 一 簡介
    • 面臨的問題
    • 介紹
    • SpringCloud Config分為服務端和用戶端兩部分。
  • 二 服務端demo
    • 配置檔案部分
    • 建立服務端項目
    • 配置讀取規則
  • 三 用戶端demo
    • 步驟
    • 測試
    • bootstrap.yml
  • 參考

一 簡介

面臨的問題

微服務意味着要将單體應用中的業務拆分成一個個子服務,每個服務的粒度相對較小,是以系統中會出現大量的服務。由于每個服務都需要

必要的配置資訊

才能運作,是以一套

集中式的、動态的配置管理

設施是必不可少的。SpringCloud提供了ConfigServer來解決這個問題,我們每一個微服務自己帶着一個application.yml,上百個配置檔案的管理

介紹

SpringCloud Config

為微服務架構中的微服務提供

集中化的外部配置支援

,配置伺服器為各個不同微服務應用的所有環境提供了一個

中心化的外部配置

SpringCloud Config分為服務端和用戶端兩部分。

SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考
  • 服務端也稱為分布式配置中心,它是一個

    獨立的微服務應用

    ,用來連接配接配置伺服器并為用戶端提供擷取配置資訊,

    加密/解密資訊等

    通路接口
  • 用戶端則是通過

    指定的配置中心

    來管理應用資源,以及與業務相關的配置内容,并在

    啟動的時候

    從配置中心擷取和加載配置資訊。配置伺服器預設采用git來存儲配置資訊,這樣就有助于對環境配置進行版本管理,并且可以通過git用戶端工具來友善的管理和通路配置内容。

二 服務端demo

配置檔案部分

  1. 用自己的GitHub賬号在GitHub上建立一個名為microservicecloud-config的新Repository(這裡為了逼真,用了private的倉庫)
    SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考
  2. 本地檢出
    SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考
  3. 建立一個目錄app1,然後裡面建立一個application.yml(

    儲存格式必須為UTF-8

    )
server: 
  port: 8201 
spring:
  profiles: dev
  application: 
    name: microservicecloud-config-client
testmsg: devmsback
---
server: 
  port: 8202 
spring:
  profiles: test
  application: 
    name: microservicecloud-config-client
testmsg: testmsg
#  請儲存為UTF-8格式
           
  1. 送出并推送修改到github

建立服務端項目

  1. 建立Module子產品microservicecloud-config-3344
  2. pom依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>microservicecloud</artifactId>
        <groupId>com.zyc.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>microservicecloud-config-3344</artifactId>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
    </dependencies>


</project>
           
  1. yml配置
server:
  port: 3344

spring:
  application:
    name:  microservicecloud-config
  cloud:
    config:
      server:
        git:
          uri: https://github.com/zycCome/microservicecloud-config.git
          search-paths: app1 # 目錄名
          username: xxx
          password: xxx
      label: master
eureka:
  client: #用戶端注冊進eureka服務清單内
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: microservicecloud-config-1
    prefer-ip-address: true     #通路路徑可以顯示IP位址
    hostname: config1.com
           
  1. 啟動類
package com.zyc.springcloud;

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 Config_3344_StartSpringCloudApp
{
    public static void main(String[] args)
    {
        SpringApplication.run(Config_3344_StartSpringCloudApp.class,args);
    }
}

           
  1. 測試效果:1.http://localhost:3344/application-dev.yml 2.http://localhost:3344/application-test.yml
    SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考

小結:成功實作了用SpringCloud Config通過GitHub擷取配置資訊

配置讀取規則

SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考
SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考

三 用戶端demo

步驟

  1. 建立項目microservicecloud-config-client-3355
  2. 添加bootstrap.yml檔案(

    說明在下一節

    )
spring:
  cloud:
    config:
      name: microservicecloud-config-client #需要從github上讀取的資源名稱,注意沒有yml字尾名
      profile: dev   #本次通路的配置項
      label: master
#      uri: http://config-3344.com:3344  #本微服務啟動後先去找3344号服務,通過SpringCloudConfig擷取GitHub的服務位址
      discovery:
        enabled: true
        service-id: microservicecloud-config #config服務端的應用名
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

# 動态重新整理配置 ---需要忽略權限攔截
management:
  security:
    enabled: false

           
  1. 編寫controller,測試動态擷取配置資訊效果
package com.zyc.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RefreshScope
@RestController
class MessageRestController {

    @Value("${testmsg: defaultmsg}")
    private String message;

    @RequestMapping("/message")
    String getMessage() {
        return this.message;
    }
}


           
  1. 啟動類
package com.zyc.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class ConfigClient_3355_StartSpringCloudApp
{
    public static void main(String[] args)
    {
        SpringApplication.run(ConfigClient_3355_StartSpringCloudApp.class,args);
    }
}



           

測試

  1. 通路接口位址http://localhost:8201/message,檢視傳回值
  2. 修改github上的配置檔案中的值
  3. 重新整理配置,通過post請求refresh位址
    SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考
  4. 再次請求http://localhost:8201/message。會發現傳回值已經變了

bootstrap.yml

applicaiton.yml是使用者級的資源配置項

bootstrap.yml是系統級的,優先級更加高

Spring Cloud會建立一個

Bootstrap Context

,作為Spring應用的

Application Context

的父上下文。初始化的時候,

Bootstrap Context

負責從外部源加載配置屬性并解析配置。這兩個上下文共享一個從外部擷取的

Environment

Bootstrap

屬性有高優先級,預設情況下,它們不會被本地配置覆寫。

Bootstrap context

Application Context

有着不同的約定,

是以新增了一個

bootstrap.yml

檔案,保證

Bootstrap Context

Application Context

配置的分離。

參考

  • 尚矽谷 2019最新 spring cloud開發
  • github源碼
  • https://blog.csdn.net/forezp/article/details/70037513

繼續閱讀