今天聊一下,分佈式配置,由於項目中使用配置文件比較多,每次修改配置文件,項目需要重新發布,因此考慮使用熱配。找了一個輕量級分佈式配置管理平臺。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")
添加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配置
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);
}
啟動測試
5.修改配置
將版本修改為3,測試是否生效
閱讀更多 閒著沒事聊會 的文章