天天看點

Spring Cloud學習|第七篇:分布式配置中心+Bus總線

目錄

    • 1.前言
    • 2.分布式配置中心搭建
    • 3.手動重新整理配置
    • 4.消息總線動态重新整理配置
    • 5.消息總線重新整理配置原了解析

1.前言

一提到微服務,那麼離不開的就是配置中心,而對于多個服務共用的配置我們總希望有一個配置中心進行儲存。Springcloud提供的

Spring Cloud Config

就為我們提供了這個能力,下邊我們從零開始搭建一個分布式配置中心。

2.分布式配置中心搭建

服務 端口 作用
eureka-service 8761 注冊中心
config-service 8888 配置中心服務端
producer-client 9001 用戶端
producer-client 9002 用戶端
  • 碼雲上建立配置檔案件儲存配置檔案
注意:配置檔案名稱需根據規則進行設定:如

config-client-dev.yml

,其中

config-client

:表示定義的服務名,

dev

:表示激活何種模式,主要針對不同的場景設定不同的配置檔案,如生産、開發、測試等環境
  • 建立注冊中心

    eureka-service

  • 建立分布式配置中心服務端

    (1)引入依賴

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-config-server</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
   </dependency>
           

(2) 配置

application.yml

在此以碼雲為例進行配置,大家也可以使用github賬戶或svn賬号配置均可
spring:
 cloud:
    config:
      server:
        git:
          uri: https://gitee.com/xxx/spring-cloud-config.git
          search-paths:
            - config
          default-label: master
          username: admin
          password: admin
           

配置說明:

配置 說明
uri git中配置檔案倉庫位址
search-paths 配置檔案夾
default-label 配置檔案所在分支
username 碼雲使用者名
password 碼雲密碼

(3)啟動配置中心

通路

http://localhost:8888/config-producer-dev.yml

出現如下界面表示配置中心服務端配置成功,下圖中userAge=22即為第一步中配置檔案配置資訊

Spring Cloud學習|第七篇:分布式配置中心+Bus總線
  • 建立分布式配置中心用戶端

    (1)引入依賴

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-config-client</artifactId>
 </dependency>
 <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
           

注意:一定要引入

spring-boot-starter-web

依賴,否則配置不成功

(2)配置

bootstrap.yml

spring:
  cloud:
    config:
      name: config-producer
      label: master
      profile: dev
      discovery:
        service-id: config-server
        enabled: true
      fail-fast: false
      retry:
        max-attempts: 6
           

配置說明:

配置 說明
spring.cloud.config.name 表示配置檔案中配置的字首名稱,本例中配置檔案在git中名為

config-producer-dev.yml

spring.cloud.config.profile 配置選擇那一個配置檔案,根據配置檔案名選擇
spring.cloud.config.label 選擇分支
spring.cloud.config.discovery.service-id 表示配置中心服務端名稱
spring.cloud.config.discovery.enabled 表示可發現配置中心
spring.cloud.config.fail-fast 表示是否快速失敗
spring.cloud.config.retry.max-attempts 表示失敗重試次數

(3)啟動測試

當啟動用戶端時,擷取配置檔案中變量 ,則能正常擷取到配置檔案變量值表示配置中心用戶端配置成功

Spring Cloud學習|第七篇:分布式配置中心+Bus總線

通過上述配置,我們在啟動時能正常擷取配置檔案中的值,但當配置檔案中值被修改時,我們此時隻能通過重新開機服務的方式來擷取配置檔案中的值 ,在實際生産中我們不可能每次修改配置檔案就重新開機服務,是以我們需要下邊的屬新配置檔案。

3.手動重新整理配置

-用戶端增加服務監控依賴

<!-- actuator監控中心 -->
 <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>
           
  • 用戶端修改配置檔案

    bootstrap.yml

management:
  endpoints:
    web:
      exposure:
        include: "*"
           
  • 擷取配置檔案處類上增加

    @RefreshScope

@RestController
@RefreshScope
public class ProducerController {

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

  @GetMapping("/test1")
  public String test1(){
    return userAge;
  }
}
           
  • 當修改配置檔案後,需手動執行如下

    POST

    請求,ip及端口為用戶端配置端口
$ http://localhost:9001/actuator/refresh
           

通過上述配置,我們修改完配置中心配置後,在手動請求一次上述更新接口,則會将服務擷取到的配置進行更新。但上述手動重新整理配置存在問題,如果服務有成百上千個,那麼我們就要對每個服務進行重新整理,顯然是不可取的,是以我們需要配置Bus消息總線進行動态重新整理配置

4.消息總線動态重新整理配置

  • 配置中心服務端、用戶端均增加消息總線依賴
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-bus-amqp</artifactId>
 </dependency>
           
  • 配置檔案中增加

    rabbitmq

    配置,預設為本機

    mq

    ,且賬戶名密碼均為

    guest

    ,

    mq

    可選擇

    rabbitmq

    kafka

spring:
  rabbitmq:
    host: 192.168.1.100
    port: 5672
    username: admin
    password: admin
           
  • 配置重新整理
management:
  endpoints:
    web:
      exposure:
        include: bus-refresh
           
  • 啟動測試

    上述配置完成後,我們啟動多個用戶端,同時修改配置檔案,當我們通路用戶端請求時發現配置依然沒有更新,我們還需要手動執行如下請求:

$ http://localhost:9001/actuator/bus-refresh
           

當執行完上述請求後,我們在通路啟動的兩個用戶端發現配置已經更新,雖然結合Bus消息總線進行消息重新整理也需要手動觸發一次,但是觸發一次就已經将配置更新至所有服務,是以此種方式也是可取的。至此,我們的分布式配置中心搭建以及整合Bus進行配置動态重新整理已經整合完畢。

5.消息總線重新整理配置原了解析

  • 當配置搭建完畢,啟動服務時,我們登入

    rabbitmq

    發現會多一個

    exchange

    ,同時啟動的用戶端均有一個隊列綁定該

    exchange

Spring Cloud學習|第七篇:分布式配置中心+Bus總線
  • 當配置中心檔案進行修改後,我們手動發送一次重新整理請求,實質以消息形式發送至上述建構的

    exchange

    中。
  • 當消息發送至

    exhange

    中時,根據路由鍵路由至綁定的隊列中,由于路由鍵為通配符

    #

    表示任何請求均發送至隊列中,通過一次請求重新整理所有服務配置。

繼續閱讀