DuiC 統一配置管理 2

kevinz發表於2019-02-16

為什麼設計 DuiC

在工作中我們時常要根據不同環境配置不同的引數,讓專案的靈活性、可用性變得更高,那靈活的配置就變得必不可少,雖然目前已經存在很多配置管理解決方案,但是管理方式侷限性大,適應範圍窄。

DuiC 在設計初就考慮到配置的應用範圍,將配置獲取方式設計為 RESTful API 的方式,可支援任何伺服器端,客戶端以及 WEB 輕鬆獲取配置。其次 DuiC 管理配置統一採用 YAML 的方式,並提供 WEB 編輯器及語法高亮,語法校驗等功能,降低配置修改的錯誤率。

DuiC 原始碼: https://github.com/zhudyos/duic

已實現的功能

  1. 檢查配置狀態
  2. 通過 key 獲取某個配置
  3. 通過 name/profile 獲取整體配置
  4. 多個 profile 配置深度合併
  5. 配置許可權管理
  6. 分散式配置管理
  7. 容器部署

Swagger 文件: https://app.swaggerhub.com/ap…
Docker 映象: https://hub.docker.com/r/zhud…

Java Client API

DuiC 提供 Java 客戶端 API 幫助你快速獲取配置,支援 Android/Java/JavaWeb/Spring 獲取配置同時支援熱載入配置。

duic-java-client:https://github.com/zhudyos/du…

Java/Android 使用

使用 API 提供的 ConfigUtils 工具包獲取配置。
建立 Config 例項並將設定為 ConfigUtils 的預設配置,使用。

Config config = new Config.Builder()
        .baseUri("https://duic.zhudy.io/api/v1")
        .name("hello")
        .profile("world")
        // .configToken("...")
        // .reloadPlot(new ReloadPlot(10, TimeUnit.SECONDS)) // 過載
        // .failFast(true) // 快速失敗
        // .listener() // 配置載入監聽
        .build();
ConfigUtils.setDefaultConfig(config);

Java Web 使用

使用 API 提供的 ConfigUtils 工具包獲取配置。
在 web.xml 中配置監聽器

<!-- 預設配置路徑 classpath:duic.properties -->
<context-param>
  <param-name>duicConfigLocation</param-name>
  <param-value>classpath:duic.properties</param-value>
</context-param>

<listener>
  <listener-class>io.zhudy.duic.config.web.DuicConfigContextListener</listener-class>
</listener>

在 duic.properties 檔案中增加配置管理中心資訊

duic.base.uri=https://duic.zhudy.io/api/v1
duic.name=hello
duic.profile=world
duic.config.token=
duic.reload.period=10
duic.reload.unit=SECONDS
duic.fail.fast=false
# 多個 DuicListener 採用英文逗號(,)分隔
duic.listeners=xx.MyDuicListener

在 Spring 中使用

  1. 使用 API 提供的 ConfigUtils 工具包獲取配置
  2. 使用 @Value 的方式注入配置(推薦

以上2種方式都支援熱載入,推薦使用 @Value 的方式注入配置,這種方式對於你的程式碼沒有任何的浸入性,支援 spring3.2 以上的版本使用。

  1. 使用註解的方式初始化

    @Bean
    public static DuicConfigBeanFactoryPostProcessor duicConfigBeanFactoryPostProcessor() {
      DuicConfigBeanFactoryPostProcessor processor = new DuicConfigBeanFactoryPostProcessor();
      processor.setBaseUri("https://duic.zhudy.io/api/v1");
      processor.setName("hello");
      processor.setProfile("world");
      return processor;
    }
  2. 使用 XML 的方式初始化

    <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="world"/>
    </bean>

注入配置

@Component
public class Example {

  @Value("${k1.string}")
  private String k1;
}

Spring Boot 支援

DuiC 也提供了 duic-spring-cloud-config-client 來支援 spring-boot,使用 DuiC 管理配置可以完全替代 spring-cloud-config。

duic-spring-cloud-config-client:https://github.com/zhudyos/du…

該工具包支援 @ConfigurationProperties@Value 注入配置,同時也支援熱載入。
注意如果你使用 @ConfigurationProperties 注入配置並且想要熱載入配置需要配合使用 @RefreshScope 註解。

關於更多 @RefreshScope 的資料請檢視 spring-cloud 官方文件:https://cloud.spring.io/sprin…

使用示例在 bootstrap.yml 檔案中增加如下配置

spring:
  application:
    name: samples (1)

duic:
  spring:
    cloud:
      config:
        watch:
          enabled: true (2)
          initial_delay: 10000 (3)
          fixed_delay: 10000 (4)
        uri: https://duic.zhudy.io/api/v1 (5)
        profile: first,second (6)
        # token: [TOKEN] (7)

duic docker-compose

https://github.com/zhudyos/du…

關於 DuiC 更加詳細的描述,可以檢視倉庫中在 readme。

線上演示平臺:https://duic.zhudy.io/index.html
e-mail: kevinz@weghst.com
password: 123456

大家可以使用線上演示平臺,嘗試使用其提供的 API 及 SDK。
友情提醒:伺服器配置較差,訪問速度可能不是很快,請體諒。

相關文章