隨着項目的復雜度越來越高,微服務的盛行,各個中間件相互配合並發揮其優勢,各種配置是避免不了的,以前嘗試過配置放在文件,后來spring cloud 也推出了自己的spring cloud config 配置組件,功能上沒有問題,但真正使用起來還是不順手,順勢而為,攜程開發部門開源了一套配置平台,官方介紹詳見 https://github.com/ctripcorp/apollo,這篇文章主要介紹安裝及Java、Net 項目使用。
(一) 環境要求
- Centos 7.5.1804
- Docker 18.06.1-ce
(二) 安裝設置
- 數據庫設置
a) 建庫文件可以從官方下載或直接在我上傳的百度網盤下載,點擊下載,打開任何客戶端執行Sql文件即可,可以看到兩個數據庫
ApolloconfigdbFat: 為具體環境配置庫,因為不同環境需要配置不同的存儲庫
Apolloportaldb:為管理門戶
- 服務安裝,我用到的鏡像為idoop/docker-apollo,版本號1.0.0,執行如下命令下載鏡像,注意指定版本號 docker pull idoop/docker-apollo:1.0.0,因為最新版本對Net支持不完善。下載完成后,安裝服務,命令行支持
docker run -d --network host --restart always --name apollo -e PORTAL_DB="jdbc:mysql://192.168.1.215:3307/ApolloPortalDB?characterEncoding=utf8" -e PORTAL_DB_USER="root" -e PORTAL_DB_PWD="123456" -e FAT_DB="jdbc:mysql://192.168.1.215:3307/ApolloConfigDBFat?characterEncoding=utf8" -e FAT_DB_USER="root" -e FAT_DB_PWD="123456" idoop/docker-apollo:1.1.0
主要注意環境數據庫名字及賬號信息、鏡像版本。命令執行完成后,輸入
docker ps | grep apollo
命令,查看容器狀態
待容器狀態為Up的時候,在瀏覽器輸入 http://192.168.1.215:8070,進入管理門戶,默認管理賬號為apollo/admin。可以看到如下圖示
說明服務安裝成功。
- 設置,點擊創建項目,設置項目的配置信息
確認沒有問題,再點擊發布,只有發布后,客戶端才能接收到信息,這個功能很給贊,考慮的比較周全。
- 項目接入
a) Net
添加apollo.net程序包(v1.5.0)
編輯App.config 或者其它配置文件
<add key="AppID" value="test-app"/> <add key="Apollo.FAT.Meta" value="http://192.168.1.215:8081"/>
讀取配置
幫助 Utils
private static void OnChanged(object sender, ConfigChangeEventArgs changeEvent) { Console.WriteLine("Changes for namespace {0}", changeEvent.Namespace); foreach (string key in changeEvent.ChangedKeys) { ConfigChange change = changeEvent.GetChange(key); Console.WriteLine("Change - key: {0}, oldValue: {1}, newValue: {2}, changeType: {3}", change.PropertyName, change.OldValue, change.NewValue, change.ChangeType); } } static void Main(string[] args) { Config config = ConfigService.GetAppConfig(); config.ConfigChanged += OnChanged; while (true) { Thread.Sleep(200); var timeout = config.GetProperty("timeout", ""); Console.WriteLine(timeout); } }
運行程序,輸入我們在配置中定義的key,比如我設置的xxx,會返回micro,如圖所示,這樣服務就達到預期的效果
b) Java
添加apollo-client包
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.0.0</version> </dependency>
編輯配置文件application.properties
app.id配置APP的標志號
env 環境名稱,目前支持DEV、FAT、UAT、PRO
apollo.meta config 服務
app.id = test-app
env = fat
apollo.meta = http://192.168.1.215:8081
application添加注解
@EnableApolloConfig
獲取配置信息
/** * 從apollo獲取配置信息 * */ @ApolloConfig private Config config; @GetMapping("/read_config") public Properties apolloReadDemo(){ /** * 得到當前app.id中的配置 * */ Set<String> set = config.getPropertyNames(); for(String key : set){ PropertiesUtils.properties.setProperty(key,config.getProperty(key,null)); } for(String key : PropertiesUtils.properties.stringPropertyNames()){ System.out.println(key+">>>"+PropertiesUtils.properties.getProperty(key)); } return PropertiesUtils.properties; }
啟動項目,瀏覽器輸入http://localhost:8089/apollo/read_demo地址查看返回結果, 8089換成你自己的項目端口號,返回如下信息,示意服務正常運行。
這樣分布式配置就介紹完了,主要介紹環境搭建及Net、java 項目接入,如果在開發中遇到問題,也可以留言共同探討共同進步。