【微服務】之三:從零開始,輕鬆搞定SpringCloud微服務-配置中心

生活常識發表於2017-12-07

官方解釋

Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer's own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.

本系列博文目錄

【微服務】從零開始,輕鬆搞定SpringCloud微服務目錄

說明:本系列原始碼持續更新,開始本篇之前先了解前面幾篇文章。

開始起飛

基本思路:本文采用Git倉庫作為配置檔案的存放地址,通過建立一個配置中心伺服器啟動服務,然後再通過建立一個配置中心的客戶端進行測試是否正常運轉。

建立配置中心倉庫

在原有的父類專案下建立一個普通的子專案,可以刪除無關的檔案,只留下空白專案。然後再建立一個測試的配置檔案。
image.png

配置檔案中加入測試資料

#隨意設定的一個引數
myblog:
  name: 千萬之路剛開始-author-hyh
  url: http://www.hanyahong.com
  location: BeiJing

建立配置中心服務端

建立子專案

image.png

POM檔案配置

在pom.xml檔案中做一下配置


<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>
<build>
   <plugins>
       <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
       </plugin>
   </plugins>
</build>

配置專案resource配置檔案

:整個部落格是對各個子專案整合,因此加入了服務註冊中心的相關配置

在resources資料夾下建立application.yml檔案。並加入以下配置:

#服務埠
server:
  port: 8082

#服務註冊中心配置
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8081/eureka/

#spring設定
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/hanyahong/spring-cloud-microservice.git
          searchPaths: cloud-hyh-config-repo

建立主方法類

在建立完包以後,建立主方法。


@EnableDiscoveryClient
@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {

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

至此,服務端配置完畢,啟動伺服器即可,等待客戶端驗證。

建立客戶端

建立一個配置客戶端,對剛剛的服務進行測試。
@EnableDiscoveryClient: 服務發現客戶端註解,用於被發現。
@EnableConfigServer: 開啟配置中心伺服器配置。

建立客戶端子專案

image.png

配置pom檔案

在子專案pom.xml中加入一下依賴及外掛。

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

建立配置檔案

在子專案中resources資料夾下,建立bootstrap.yml檔案。加入一下配置。

spring:
  application:
    #本專案名稱
    name: config-client
  cloud:
    config:
      #配置中心伺服器地址配置
      uri: http://localhost:8082/
      profile: default
      label: master
      retry:
        # 配置重試次數,預設為6
        max-attempts: 6
        # 間隔乘數 預設1.1
        multiplier: 1.1
        # 初始重試間隔時間,預設1000ms
        initial-interval: 1000
        # 最大間隔時間,預設2000ms
        max-interval: 2000

server:
  port: 8091
#服務發現配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8081/eureka/

建立程式入口

建立預設包以後建立ConfgClientApplication.java 檔案。

/** 
 * @Description :配置中心啟動類
 * @Author hanyahong
 * @Date 2017/12/6- 14:06
 */


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

建立測試API

建立一個測試API檔案,TestApi.java。

/**
 * @Description :配置中心-客戶端展示API
 * @Author hanyahong
 * @Date 2017/12/6- 16:39
 */
@RefreshScope
@RestController

public class TestApi {

    @Value("${myblog.name}")
    private String name;
    @Value("${myblog.url}")
    private String url;
    @Value("${myblog.location}")
    private String location;
    @RequestMapping("/blog-info")
    public String getBlogInfo() {
        return "從Github倉庫中獲取得到我部落格資訊:【"+location+","+","+url+","+name+"】";
    }
}

@RefreshScope:開啟重新整理

至此,配置中心測試的客戶端基本完畢。
對於子專案來說有三個子專案:
cloud-hyh-config 埠號:8082
cloud-hyh-config-client 埠號:8091
cloud-hyh-config-repo 純儲存使用,該文件下面的配置檔案一定要上傳到倉庫後,才可以遠端獲取。

啟動專案並測試

對服務註冊中心(上篇有寫)、服務配置中心、服務客戶端分別進行啟動。
可以通過註冊中心檢視是否都已經被納入管理。
image.png

測試一: 註冊中心測試
首先通過訪問配置中心伺服器的地址可以進行測試是否獲取成功。
訪問 http://localhost:8082/config-client.yml 對倉庫中資原始檔 測試是否返回結果。
另外也可以通過 http://localhost:8082/config-client/master 進行訪問。瀏覽器顯示返回結果:

"name":"config-client","profiles":["master"],"label":null,"version":"7169e90f628c85d582f3f9d5fceda36696ebd751","state":null,"propertySources":[{"name":"https://github.com/hanyahong/spring-cloud-microservice.git/cloud-hyh-config-repo/config-client.yml","source":{"myblog.name":"千萬之路剛開始-author-hyh","myblog.url":"http://www.hanyahong.com","myblog.location":"BeiJing","config-client.name":"test"}}]}

測試二: 客戶端訪問API測試
通過客戶端訪問API http://localhost:8091/blog-info 顯示結果:
從Github倉庫中獲取得到我部落格資訊:【BeiJing-Customs,,http://www.hanyahong.com,千萬之路剛開始-author-hyh】
測試成功!

測試三: 動態更新引數測試
配置中心一個重要的功能就是你無須重啟去生效一些引數配置,系統可以通過訪問/refresh 進行動態重新整理,將引數生效。

  1. 修改配置檔案資訊,上傳git倉庫。
  2. 使用PostMan 或其他工具進行一次POST請求 API:http://localhost:8091/refresh (一定要看清楚,POST請求,瀏覽器直接訪問無效,會報Request method 'GET' not supported 錯誤)。
  3. 再一次訪問 http://localhost:8091/blog-info ,可以看到已在未重啟的情況下,配置動態更新。

後續說明

因配置中心涉及很多資料的更新,不可能每次通過這種方式去動態更新,後續會有專門訊息匯流排模組的講解,將通過訊息匯流排的機制去進行配置的傳輸。

相關文章