Spring Cloud微服務學習筆記之統一配置中心 config

一、配置中心config

爲什麼需要統一配置中心config
◆不方便維護(多個開發者修改同一個配置文件)
◆配置內容安全與權限
◆更新配置項目需重啓。

配置流向圖示
在這裏插入圖片描述

1.1 Config Server 的使用

首先,在IDEA中通過Spring Initializr選擇Spring Cloud Discovery 中的Eureka Discovery Client 組件,創建一個Spring Boot項目,添加pom依賴在主類添加@EnableEurekaClient註解,在application.yml中添加相應配置。

  1. 添加@EnableConfigServer並添加pom依賴
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-Config—Server</artifactId>
</dependency>
  1. 新建Git項目添加order服務的order.yml配置文件,並在Config服務中配置

config中的application.yml

spring:
	application:
		name:config 
	cloud:
		config:
			server:
				git:
					uri: https://github.com/xxxx/xxxx
					username: xxx 
					password: xxx
					basedir: /user/a/b/c/ #本地Git存放配置的路徑
  1. 在Git工程上新建release分支,在order-dev.yml中添加環境(開發測試等)和分支信息
spring:
  application:
    name: order
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
env:
	dev #test
lable:
	release
  1. 訪問路徑規則

訪問 locahost:8080/{name}-{profiles}.yml或 locahost:8080/{label}/{name}-{profiles}.yml
其中,name表示服務名,profiles環境,label分支(branch)默認爲master

輸入locahost:8080/release/order-dev.yml即可訪問上述配置文件;

若無環境信息,則order-a或order-b.yml都可,但不能爲空;

也可.json或.properties,則可自動轉換格式顯示在瀏覽器上;

若Git工程上yml文件格式錯誤則訪問報錯。

1.2 Config Client 的使用

  1. 在order服務項目中,並添加@EnableConfigClient並添加pom依賴,修改yml配置文件
spring:
  application:
    name: order #通過這兩個找到自己的配置
  cloud:
    config:
      discovery:
        enabled: true
        service-id: CONFIG
      profile: dev  #通過這兩個找到自己的配置

必須修改yml文件名爲bootstrap.yml,否則系統自動尋找application.yml而報錯,bootstrap.yml則可以引導系統從Git上pull相應配置

  1. 在controller中做測試,是否能找到上述yml文件的兩個重要參數
@RestController
@RequestMapping("/env")
public class EnvController {

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

    @GetMapping("/print")
    public String print() {
        return env;
    }
}

啓動項目,發現已獲取遠端git上的配置,項目正常運行

  1. 修改配置再測試

修改Eureka-Server的端口地址爲8762,也修改Config和order遠端git的註冊地址爲8762,發現啓動報錯,且只有config註冊在了註冊中心上,是由於order默認註冊在8761註冊中心上,其還未註冊在註冊中心8762上,就無法訪問到config,從而無法pull到配置。

解決方法:如若不使用默認的8761地址,就將註冊地址的配置寫在bootstrap.yml

注意:上述兩個重要參數起到的作用等用於locahost:8080/release/order-dev.yml,而如此訪問的話config默認是將遠端的order.yml與order-dev.yml合併後展示;一般將order-dev.yml、order-test.yml等公用部分放在order.yml中。

二、Spring Cloud Bus 自動更新配置

實現了Spring Cloud Bus組件和config組件的服務,在更新了遠程配置後,會通過bus-refresh接口通知消息隊列MQ,再由消息隊列通知訂閱的服務。

2.1 Spring Cloud Bus實操

1. 在config和order服務中添加pom依賴

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

啓動後,可在eureka中看到註冊的兩個服務,可在MQ看到生成的兩個消息隊列

2. 實現bus-refresh接口

config服務的application.yml添加

management:
  endpoints:
    web:
      expose: "*"

修改遠程order配置內容,然後訪問localhost:8080/actuator/bus-refresh,config服務發佈消息給消息隊列(在MQ中的config隊列中可看到一個向上的小三角)。

在order服務的測試配置的EnvController上添加@RefreshScope,即可看到更新後的配置內容。

3. 測試Spring Cloud Bus

在遠程git上添加配置

girl:
	name: xxx
	age: 18

在order服務中新建GirlConfig類

@Data
@Component
@ConfigurationProperties("girl")
@RefreshScope
public class GirlConfig {

    private String name;

    private Integer age;
}

新建GirlController

@RestController
public class GirlController {

    @Autowired
    private GirlConfig girlConfig;

    @GetMapping("/girl/print")
    public String print() {
        return "name:" + girlConfig.getName() + " age:" + girlConfig.getAge();
    }
}

修改遠程order配置內容,然後訪問localhost:8080/actuator/bus-refresh,再訪問localhost:8080/girl/print,即可看到更新後的內容。

2.2 WebHook自動觸發

一般git管理工具都自帶WebHook工具,將在push代碼即更新的時候將自動觸發bus-refresh接口,無須每次手動訪問,真正實現全自動配置。

在GitHub上配置的路由是localhost:8080/monitor,其中可以用內網穿透工具nateapp,映射在本地網址,即http://5a38i8.natappfree.cc/monitor

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