分散式配置中心 duic
什麼是配置?
服務執行時能夠通過外部動態修改的引數既是配置。在執行時動態變更服務的行為,避免業務發生變更需要修改程式碼或重啟服務等等。
什麼是 duic?
duic 是配置管理中心,將配置統一管理提供標準的配置格式及編輯方式。
設計目標是統一不同應用的配置管理方式,打造更人性化的配置編輯方式,提供更靈活的配置獲取方式。
如上圖:duic 支援任何應用,任何語言的配置管理(Java,Go,Android,Web等),同時 duic 採用 YAML 語法作用配置檔案格式,支援資料型別及結構化配置。
如上圖採用 YAML 編輯好配置之後通過 RESTful 介面獲取配置(PS:官方目前已經提供Java、Android、Go語言的SDK,後期還會支援更多語言 )。
為什麼採用 YAML 作為配置格式?
key=value
特性
- 支援 MongoDB,SQL/">MySQL,PostgreSQL,Oracle 儲存配置資訊
- 配置修改實時更新
- 支援多配置合併
- 支援按需獲取配置
- 支援歷史版本比較
- 支援配置克隆
- 支援使用者許可權控制
- 支援 IP/Token 訪問限制
- 支援 Docker
部署
開箱即用,duic 每個 release 版本都可以通過ofollow,noindex" target="_blank">GitHub Releases 獲取 jar 包部署,或者你可以在Docker Hub 獲取 Docker 映象直接部署。你只需要關注如何使用 duic,而無需關心內部的實現細節,當然你如果對實現細節感興趣,非常歡迎幫忙審查程式碼,你的幫助可以讓 duic 的程式碼變得更加精練。
MySQL 部署
在GitHub Releases 頁下載最新版本的duic-x.x.x.jar 檔案。
前提
Java >= 1.8
MySQL >= 5.6
建立資料庫
CREATE DATABASE IF NOT EXISTS `duic` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
配置資料庫連線
application.yml
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/duic?autoReconnect=true&useServerPrepStmts=true username: root password: root
application.yml
檔案與duic-x.x.x.jar
檔案放置在同一目錄中。duic 是採用 spring-boot 開發,配置檔案目錄完成遵守 spring-boot 預設載入方式,更多關於 spring-boot 配置可以瞭解
啟動服務
java -Dspring.profiles.active=mysql -jar duic.jar
輸出如下日誌時,恭喜你 duic 已經啟動成功。
_____________ |__ `.(_) .' ___| | | `. \ _____ / .'\_| | || |[| | | [|| | _| |_.' / | \_/ |, | |\ `.___.'\ |______.''.__.'_/[___]`.____ .' :: duic ::(v1.5.2-SNAPSHOT) 2018-05-03 07:06:05,980 INFOi.z.d.server.Application$Companion - Starting Application.Companion v1.5.2-SNAPSHOT on ubuntu with PID 47440 (/opt/duic/duic.jar started by zy in /opt/duic) 2018-05-03 07:06:05,984 INFOi.z.d.server.Application$Companion - The following profiles are active: mysql,prod 2018-05-03 07:06:09,595 INFOr.i.netty.tcp.BlockingNettyContext - Started HttpServer on /0:0:0:0:0:0:0:0%0:7777 2018-05-03 07:06:09,596 INFOo.s.b.w.e.netty.NettyWebServer - Netty started on port(s): 7777 2018-05-03 07:06:09,600 INFOi.z.d.server.Application$Companion - Started Application.Companion in 4.192 seconds (JVM running for 4.864)
登入控制檯編輯你的第一個配置吧
http://[IP]:7777/index.html
PS:記得將 IP 替換為你服務的 IP。
關於 duic 部署在這裡就寫這麼多了,有任何問題請給我留言,我將一一解答,更多關於 duic 部署方面的內容,大家可以參考官方提供的文件DuiC Wiki 。
使用
登入並建立你的第一個配置
https://duic.zhudy.io/index.html
spring-boot 載入配置
新增 Maven 依賴
<dependency> <groupId>io.zhudy.duic</groupId> <artifactId>duic-spring-cloud-config-client</artifactId> <version>2.0.1</version> </dependency>
新增 Gradle 依賴
compile "io.zhudy.duic:duic-spring-cloud-config-client:2.0.1"
在bootstrap.yml
配置檔案中新增獲取配置資訊
duic: spring: cloud: config: uri: https://duic.zhudy.io/api/v1 name: hello profile: first # token: [TOKEN]
-
uri
配置中心地址字首 -
name
配置名稱 -
profile
配置環境名稱,多個採用,
分隔
配置完成後在 spring-boot 專案中即可使用@ConfigurationProperties
@Value
方式注入配置依賴,duic 並沒有提供任何自定義註解,完全遵守 spring-boot 的程式設計習慣,無縫接入及移除 duic。
GitHub:duic-spring-cloud-config-client
spring 載入配置
新增 Maven 依賴
<dependency> <groupId>io.zhudy.duic</groupId> <artifactId>duic-spring-cloud-config-client</artifactId> <version>2.0.1</version> </dependency>
新增 Gradle 依賴
compile "io.zhudy.duic:duic-spring-cloud-config-client:2.0.1"
<bean id="duicConfigBeanFactoryPostProcessor" class="io.zhudy.duic.config.spring.DuicConfigBeanFactoryPostProcessor"> <property name="baseUri" value="https://duic.zhudy.io/api/v1"/> <property name="name" value="hello"/> <property name="profile" value="first"/> </bean>
配置完成 spring bean 之後在專案中即可使用@Value
注入配置,完全相容 spring 程式設計習慣,支援配置熱載入。
GitHub:duic-java-client
go 載入配置
引入 duic-go-client 依賴包
go get -u github.com/zhudyos/duic-go-client
初始化配置資訊
duic.BaseUri = "https://duic.zhudy.io/api/v1" duic.Name = "hello" duic.Profiles = "first" duic.Init()
獲取配置
duic.Bool("key")// 獲取一個 bool 配置 duic.Int("key")// 獲取一個 int 配置 duic.Float64("key")// 獲取一個 float64 配置 duic.String("key")// 獲取一個 string 配置 duic.Array("key")// 獲取一個數組配置 duic.Object("key")// 獲取一個物件配置
結語
歡迎 PR!!!