統一配置中心config
一、配置中心config
爲什麼需要統一配置中心config
◆不方便維護(多個開發者修改同一個配置文件)
◆配置內容安全與權限
◆更新配置項目需重啓。
配置流向圖示
1.1 Config Server 的使用
首先,在IDEA中通過Spring Initializr選擇Spring Cloud Discovery 中的Eureka Discovery Client 組件,創建一個Spring Boot項目,添加pom依賴在主類添加@EnableEurekaClient註解,在application.yml中添加相應配置。
- 添加@EnableConfigServer並添加pom依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-Config—Server</artifactId>
</dependency>
- 新建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存放配置的路徑
- 在Git工程上新建release分支,在order-dev.yml中添加環境(開發測試等)和分支信息
spring:
application:
name: order
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
env:
dev #test
lable:
release
- 訪問路徑規則
訪問 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 的使用
- 在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相應配置
- 在controller中做測試,是否能找到上述yml文件的兩個重要參數
@RestController
@RequestMapping("/env")
public class EnvController {
@Value("${env}")
private String env;
@GetMapping("/print")
public String print() {
return env;
}
}
啓動項目,發現已獲取遠端git上的配置,項目正常運行
- 修改配置再測試
修改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