為什麼要統一管理微服務配置?
隨著微服務不斷的增多,每個微服務都有自己對應的配置文件。在研發過程中有測試環境、UAT環境、生產環境,因此每個微服務又對應至少三個不同環境的配置文件。這麼多的配置文件,如果需要修改某個公共服務的配置信息,如:緩存、數據庫等,難免會產生混亂,這個時候就需要引入Spring Cloud另外一個組件:Spring Cloud Config。
如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。
有哪幾種?
1.SpringCloud config
Spring Cloud Config是一個解決分佈式系統的配置管理方案。它包含了Client和Server兩個部分,Server提供配置文件的存儲、以接口的形式將配置文件的內容提供出去,Client通過接口獲取數據、並依據此數據初始化自己的應用。
其實就是Server端將所有的配置文件服務化,需要配置文件的服務實例去Config Server獲取對應的數據。將所有的配置文件統一整理,避免了配置文件碎片化。
如果服務運行期間改變配置文件,服務是不會得到最新的配置信息,需要解決這個問題就需要引入Refresh。可以在服務的運行期間重新加載配置文件。
當所有的配置文件都存儲在配置中心的時候,配置中心就成為了一個非常重要的組件。如果配置中心出現問題將會導致災難性的後果,因此在生產中建議對配置中心做集群,來支持配置中心高可用性。
2.nacos(阿里巴巴)
Nacos 支持基於 DNS 和基於 RPC 的服務發現(可以作為springcloud的註冊中心)、動態配置服務(可以做配置中心)、動態 DNS 服務。
官網:
Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您實現動態服務發現、服務配置管理、服務及流量管理。
Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以“服務”為中心的現代應用架構(例如微服務範式、雲原生範式)的服務基礎設施。
3.Apollo(阿波羅)
Apollo(阿波羅)是攜程框架部門研發的配置管理平臺,能夠集中化管理應用不同環境、不同集群的配置,配置修改後能夠實時推送到應用端。
apollo項目基於springboot與springcloud,可以獨立部署
Apollo GitHub地址:
https://github.com/ctripcorp/apollo
今天重點
SpringCloud-config
接之前的Demo說:創建config-center模塊,引入Gradle
服務端Gradle
compile 'org.springframework.cloud:spring-cloud-config-server'
客戶端Gradle
compile 'org.springframework.cloud:spring-cloud-starter-config'
啟動類引入ConfigServer代表為配置中心服務端
package org.gd;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
/**
* @DATA 2019-03-11 09:10
* @Author 張國偉 WeChat:17630376104
* @Description TODO
*/
@EnableConfigServer
@SpringBootApplication
public class ConfigConter {
public static void main(String[] args) {
SpringApplication.run(ConfigConter.class, args);
}
}
創建三個bootstrap
我們把配置文件放在Gitlab上,在Gitlab上創建yml
創建yml
如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。
注意:yml的名稱一定一定要和application.name一直,儘量避免沒必要的麻煩
那我們再看下服務端yml怎麼寫
spring:
application:
name: config-center
cloud:
config:
server:
git:
uri: https://gitlab.com/zgw1469039806/config-center ###git地址
clone-on-start: true #默認情況下,配置服務會在配置文件第一次被請求時
clone
遠程的配置庫.當然也可以配置為在啟動時clone遠程的配置庫
search-paths: local #選擇是那個配置
username: ****** #git賬號密碼
password: ******
server:
port: 9999
spring:
application:
name: config-center
cloud:
config:
server:
git:
uri: https://gitlab.com/zgw1469039806/config-center.git
clone-on-start: true
search-paths: test
username: *****
password: *****
server:
port: 9999
沒錯 兩個個就是環境不一樣
spring:
profiles:
active: test
用主yml來負責啟動時的切換測試環境還是生產環境,如果配置沒有錯誤的話直接訪問可以訪問到yml
直接訪問yml的名字即可,ok到這裡配置中心已經配置完畢,那我們再來看下客戶端怎麼配置
spring:
application:
name: project-shopping-mall
cloud:
config:
uri: http://localhost:9999
客戶端很簡單,指向config服務端就可以
我們可以看到客戶端直接讀取到git上面,說明配置已經成功。
歡迎工作一到八年的Java工程師朋友們加入Java高級交流:854630135
本群提供免費的學習指導 架構資料 以及免費的解答
不懂得問題都可以在本群提出來 之後還會有直播平臺和講師直接交流噢
閱讀更多 Java的小本家 的文章