基礎架構之分布式配置中心


隨着項目的復雜度越來越高,微服務的盛行,各個中間件相互配合並發揮其優勢,各種配置是避免不了的,以前嘗試過配置放在文件,后來spring cloud 也推出了自己的spring cloud config 配置組件,功能上沒有問題,但真正使用起來還是不順手,順勢而為,攜程開發部門開源了一套配置平台,官方介紹詳見 https://github.com/ctripcorp/apollo,這篇文章主要介紹安裝及Java、Net 項目使用。

(一)  環境要求

  1. Centos 7.5.1804
  2. Docker 18.06.1-ce

(二)  安裝設置

  1. 數據庫設置

a)      建庫文件可以從官方下載或直接在我上傳的百度網盤下載,點擊下載,打開任何客戶端執行Sql文件即可,可以看到兩個數據庫

 

ApolloconfigdbFat: 為具體環境配置庫,因為不同環境需要配置不同的存儲庫

Apolloportaldb:為管理門戶

 

  1. 服務安裝,我用到的鏡像為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。可以看到如下圖示

 

說明服務安裝成功。

 

  1. 設置,點擊創建項目,設置項目的配置信息

 

 

確認沒有問題,再點擊發布,只有發布后,客戶端才能接收到信息,這個功能很給贊,考慮的比較周全。

  1. 項目接入

  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 項目接入,如果在開發中遇到問題,也可以留言共同探討共同進步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM