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

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

(一)  環境要求mysql

  1. Centos 7.5.1804
  2. Docker 18.06.1-ce

(二)  安裝設置git

  1. 數據庫設置

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

 

ApolloconfigdbFat: 爲具體環境配置庫,由於不一樣環境須要配置不一樣的存儲庫spring

Apolloportaldb:爲管理門戶sql

 

  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

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 項目接入,若是在開發中遇到問題,也能夠留言共同探討共同進步。

相關文章
相關標籤/搜索