隨着項目的複雜度愈來愈高,微服務的盛行,各個中間件相互配合併發揮其優點,各類配置是避免不了的,之前嘗試過配置放在文件,後來spring cloud 也推出了本身的spring cloud config 配置組件,功能上沒有問題,但真正使用起來仍是不順手,順勢而爲,攜程開發部門開源了一套配置平臺,官方介紹詳見 https://github.com/ctripcorp/apollo,這篇文章主要介紹安裝及Java、Net 項目使用。java
(一) 環境要求mysql
(二) 安裝設置git
a) 建庫文件能夠從官方下載或直接在我上傳的百度網盤下載,點擊下載,打開任何客戶端執行Sql文件便可,能夠看到兩個數據庫github
ApolloconfigdbFat: 爲具體環境配置庫,由於不一樣環境須要配置不一樣的存儲庫spring
Apolloportaldb:爲管理門戶sql
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
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 項目接入,若是在開發中遇到問題,也能夠留言共同探討共同進步。