SpringCloud中Config和Bus的理論及使用

本篇博客主講SpringCloud中Config和bus的理論及如何去使用。

一、簡介

在分佈式系統中,由於服務數量巨多,爲了方便服務配置文件統一管理,實時更新,所以需要分佈式配置中心組件。市面上開源的配置中心有很多,BAT每家都出過,360的QConf、淘寶的diamond、百度的disconf都是解決這類問題。國外也有很多開源的配置中心Apache的Apache Commons Configuration、owner、cfg4j等等。在Spring Cloud中,有分佈式配置中心組件 spring cloud config ,它支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中。在spring cloud config 組件中,分兩個角色,一是config server,二是config client

一個配置中心提供的核心功能
提供服務端和客戶端支持
集中管理各環境的配置文件
配置文件修改之後,可以快速的生效
可以進行版本管理
支持大的併發查詢
支持各種語言
Spring Cloud Config可以完美的支持以上所有的需求。

Spring Cloud Config項目是一個解決分佈式系統的配置管理方案。它包含了Client和Server兩個部分,server提供配置文件的存儲、以接口的形式將配置文件的內容提供出去,client通過接口獲取數據、並依據此數據初始化自己的應用。Spring cloud使用git或svn存放配置文件,默認情況下使用git,我們先以git爲例做一套示例。

二、使用Spring Cloud Config

該操作還是在之前的博客上進行

Spring Cloud的Eureka實現服務發現註冊和Feign實現服務調用 https://blog.csdn.net/weixin_42236165/article/details/92842773
SpringCloud的熔斷器之Hystrix的理論與實操
https://blog.csdn.net/weixin_42236165/article/details/93159034
SpringCloud 的Zuul理論和使用Zuul構建微服務網關以及Zuul網關使用熔斷器
https://blog.csdn.net/weixin_42236165/article/details/93169057

使用的測試工具是Postman

1.先創建config server(通過配置config server去連接服務器,得到一個接口(存放的就是配置信息))

創建一個spring-boot項目,取名爲config-server。

在這裏插入圖片描述
pom.xml中引入依賴:

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

        <!--表示爲web工程-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--暴露各種指標  貌似是必須的  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

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

新建入口類ConfigServerApplication:

package com.szh.configserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {

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

}

application.properties文件:

server.port=8888
spring.cloud.config.server.default-application-name=config-server

# 配置git倉庫地址
spring.cloud.config.server.git.uri=https://gitee.com/bufuqing/Spring-Cloud-config.git

#以下部分可以不需要配
# 配置倉庫路徑
spring.cloud.config.server.git.search-paths=myconfigpath
# 配置倉庫的分支
spring.cloud.config.label=master
# 訪問git倉庫的用戶名
spring.cloud.config.server.git.username=xxxxoooo
# 訪問git倉庫的用戶密碼 如果Git倉庫爲公開倉庫,可以不填寫用戶名和密碼,如果是私有倉庫需要填寫
spring.cloud.config.server.git.password=xxxxoooo

2.將分佈式項目中的yml,properties文件放到一個服務器上(本地服務器,github,gitee)

到gitee中新建一個倉庫(公共的)
在這裏插入圖片描述
建好的倉庫如下:
在這裏插入圖片描述

把eureka-student模塊中的application.properties文件抽取出來,
改名字爲student-dev.properties
上傳到gitee上,步驟如下:

在這裏插入圖片描述
上傳文件
在這裏插入圖片描述
在這裏插入圖片描述
3.修改eureka-student模塊(eureka-student客戶端通過調用接口,可以得到配置信息並加載到本地)

給eureka-student模塊添加依賴

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

其配置文件bootstrap.properties:(名字不能必須是bootstrap後綴要與上傳的一致)

#和git裏的文件名對應
spring.application.name=student-dev
#遠程倉庫的分支
spring.cloud.config.label=master
#dev 開發環境配置文件 |  test 測試環境  |  pro 正式環境
#和git裏的文件名對應
spring.cloud.config.profile=dev
#指明配置服務中心的網址
spring.cloud.config.uri= http://localhost:8888/

分別啓動eureka-server,config-server,eureka-student
訪問 http://localhost:8888/student-dev.properties

在這裏插入圖片描述
訪問 http://localhost:8091/students
在這裏插入圖片描述
缺點:
修改服務器上配置文件,本地項目並不能實時刷新(還是需要手動重啓)

針對這種問題:
使用spring cloud bus springcloud的消息總線解決。
客戶端會有一個監聽,一直監聽服務器有沒有給我發送消息,發送的消息就是通過rmq傳送給客戶端,客戶端監聽到消息就能自動進行編譯,自己拉取服務器的配置文件,完成自動部署。

三、使用Spring Cloud Bus

如果要修改gitee中的配置文件 但不需要重新啓動服務,就要使用springcloud中的bus組件。

1.首先在config-server的pom.xml中添加依賴:

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

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>

2.爲config-server的application.properties中填寫配置文件(連接rabbitmq的):

spring.rabbitmq.host=192.168.72.129
management.endpoints.web.exposure.include=bus-refresh

3.再爲eureka-student的pom.xml中添加依賴:

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

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>

4.修改gitee中的配置文件student-dev.properties
在這裏插入圖片描述
記得加上
在這裏插入圖片描述
訪問http://127.0.0.1:8888/actuator/bus-refresh刷新(必須以post方式提交)
在這裏插入圖片描述
空為成功

再回過來訪問http://localhost:8091/students。就訪問不到數據,因爲修改了配置文件的賬號。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章