分佈式配置管理平臺XXL-CONF實戰

今天聊一下,分佈式配置,由於項目中使用配置文件比較多,每次修改配置文件,項目需要重新發布,因此考慮使用熱配。找了一個輕量級分佈式配置管理平臺。XXL-CONF,大概說一下用法。

介紹

XXL-CONF 是一個輕量級分佈式配置管理平臺,擁有"輕量級、秒級動態推送、多環境、跨語言、跨機房、配置監聽、權限控制、版本回滾"等特性。現已開放源代碼,開箱即用。

特性

  • 1、簡單易用: 接入靈活方便,一分鐘上手;
  • 2、輕量級: 部署簡單,不依賴第三方服務,一分鐘上手;
  • 3、配置中心HA:配置中心支持集群部署,提升配置中心繫統容災和可用性。
  • 4、在線管理: 提供配置中心, 通過Web界面在線操作配置數據,直觀高效;
  • 5、多環境支持:單個配置中心集群,支持自定義多套環境,管理多個環境的的配置數據;環境之間相互隔離;
  • 6、多數據類型配置:支持多種數據類型配置,如:String、Boolean、Short、Integer、Long、Float、Double 等;
  • 7、跨語言:底層通過http服務(long-polling)拉取配置數據並實時感知配置變更,從而實現多語言支持。
  • 8、跨機房:得益於配置中心集群關係對等特性,集群各節點提供冪等的配置服務;因此,異地跨機房部署時,只需要請求本機房配置中心即可,實現異地多活;
  • 9、高性能:得益於配置中心的 "磁盤配置" 與客戶端的 "LocalCache",因此配置服務性能非常高;單機可承擔大量配置請求;
  • 10、實時性: 秒級動態推送;配置更新後, 實時推送配置信息, 項目中配置數據會實時更新並生效, 不需要重啟線上機器;
  • 11、配置變更監聽功能:可開發Listener邏輯,監聽配置變更事件,可據此動態刷新JDBC連接池等高級功能;
  • 12、最終一致性:底層藉助內置廣播機制,保障配置數據的最終一致性,從而保證配置數據的同步;
  • 13、配置備份: 配置數據同時在磁盤與MySQL中存儲和備份,並定期同步, 提高配置數據的安全性;
  • 14、多種獲取配置方式:支持 "API、 註解、XML佔位符" 等多種方式獲取配置,可靈活選擇使用;
  • 15、兼容Spring原生配置:兼容Spring原生配置方式 "@Value"、"${}" 加載本地配置功能;與分佈式配置獲取方式隔離,互不干擾;
  • 16、分佈式: 支持多業務線接入並統一管理配置信息,支撐分佈式業務場景;
  • 17、項目隔離: 以項目為維度管理配置, 方便隔離不同業務線配置;
  • 18、高性能: 通過LocalCache對配置數據做緩存, 提高性能;
  • 19、客戶端斷線重連強化:設置守護線程,週期性檢測客戶端連接、配置同步,提高異常情況下配置穩定性和時效性;
  • 20、空配置處理:主動緩存null或不存在類型配置,避免配置請求穿透到遠程配置Server引發雪崩問題;
  • 21、用戶管理:支持在線添加和維護用戶,包括普通用戶和管理員兩種類型用戶;
  • 22、配置權限控制;以項目為維度進行配置權限控制,管理員擁有全部項目權限,普通用戶只有分配才擁有項目下配置的查看和管理權限;
  • 23、歷史版本回滾:記錄配置變更歷史,方便歷史配置版本回溯,默認記錄10個歷史版本;
  • 24、配置快照:客戶端從配置中心獲取到的配置數據後,會週期性緩存到本地快照文件中,當從配置中心獲取配置失敗時,將會使用使用本地快照文件中的配置數據;提高系統可用性;
  • 25、訪問令牌(accessToken):為提升系統安全性,配置中心和客戶端進行安全性校驗,雙方AccessToken匹配才允許通訊;

以上一官網介紹。話不多說,開始使用

1.引入jar

<dependency>
<groupid>com.xuxueli/<groupid>
<artifactid>xxl-conf-core/<artifactid>
<version>1.6.1/<version>
/<dependency>

2.添加配置文件

conf.properties

#xxl-conf
xxl.conf.admin.address=http://192.168.199.101:9090/xxl-conf-admin
xxl.conf.env=test
xxl.conf.access.token=
xxl.conf.mirrorfile=/data/applogs/xxl-conf/xxl-conf-mirror-sample.properties

讓springboot讀取該配置文件

@PropertySource("conf.properties")
分佈式配置管理平臺XXL-CONF實戰

添加XxlConfConfig3登陸xxl-conf添加配置

@Configuration
public class XxlConfConfig {
private Logger logger = LoggerFactory.getLogger(XxlConfConfig.class);
@Value("${xxl.conf.admin.address}")
private String adminAddress;
@Value("${xxl.conf.env}")
private String env;
@Value("${xxl.conf.access.token}")
private String accessToken;
@Value("${xxl.conf.mirrorfile}")
private String mirrorfile;
@Bean
public XxlConfFactory xxlConfFactory() {
XxlConfFactory xxlConf = new XxlConfFactory();
xxlConf.setAdminAddress(adminAddress);
xxlConf.setEnv(env);
xxlConf.setAccessToken(accessToken);
xxlConf.setMirrorfile(mirrorfile);
logger.info(">>>>>>>>>>> xxl-conf config init.");
return xxlConf;
}
}

3.配置key

我這裡添加一個Version配置

分佈式配置管理平臺XXL-CONF實戰

分佈式配置管理平臺XXL-CONF實戰

4.測試

@XxlConf("default.version")
public String version;

單獨封裝一個類,集中配置熱配key

@Component
public class EyeShowConf {
@XxlConf("default.version")
public String version;
}

提供查詢版本接口

@RequestMapping("/queryVersion")
@ResponseBody
public String queryVersion() {
System.out.printf("version:"+eyeShowConf.version);
return JSON.toJSONString(eyeShowConf.version);
}

啟動測試

分佈式配置管理平臺XXL-CONF實戰

分佈式配置管理平臺XXL-CONF實戰

5.修改配置

將版本修改為3,測試是否生效

分佈式配置管理平臺XXL-CONF實戰

分佈式配置管理平臺XXL-CONF實戰


分享到:


相關文章: