.Net Core 商城微服務項目系列(十四):分佈式部署攜程Apollo構建配置中心

1、開場白mysql

在系統設計裏咱們有不少配置但願獨立於系統以外,而又可以被系統實時讀取。可是在傳統的系統設計裏,配置信息一般是耦合在系統內的,好比.net裏一般會放在App.config或者web.config裏,.net core則是appsettings.json裏,這些都不夠靈活,若是在制度嚴格,不容許隨便登陸服務器的中大型公司裏,每次的配置更改就意味着系統的發佈,毫無疑問,確定有帶哥要吐槽了,什麼垃圾架構!爲了解決這一問題,Apollo應運而生,專門用來構建微服務架構裏的配置中心,在實際生產項目裏爲了達到高可用,咱們會將其以分佈式的方式部署。git

 粘貼下官方的下載和文檔:github

官網:https://github.com/ctripcorp/apolloweb

Wiki:https://github.com/ctripcorp/apollo/wiki(一切的集成方式和使用方法都在這裏)sql

Issues:https://github.com/ctripcorp/apollo/issues(若是期間有任何問題,請經過這裏查找大部分解決方法)docker

 

2、Maven編譯源碼數據庫

首先要說明一下,官方提供的Quick Start以及預先打好的安裝包若是不進行特殊配置都只能單機搭建使用,經過因此若是你想把Apollo搭建在公有云或者調用放和部署不在同一環境,最好本身編譯項目。apache

我這裏使用阿里雲搭建Apollo,系統是CentOs 7。json

1.首先咱們須要在如下地址下載源碼:bootstrap

https://github.com/ctripcorp/apollo/releases

 

2. 源碼下載完成後咱們須要修改兩個地方,Apoolo是微服務架構,使用Eureka實現服務的註冊和發現,分佈式部署的時候,apollo-configserviceapollo-adminservice須要把本身的IP和端口註冊到MetaServer(apollo-configservice自己)Server(apollo-configservice自己)。因此若是實際部署的機器有多塊網卡(如docker),或者存在某些網卡的IP是Apollo客戶端和Portal沒法訪問的(如網絡安全限制),那麼咱們就須要在apollo-configserviceapollo-adminservice中作相關限制以免Eureka將這些網卡的IP註冊到Meta Server。

我這裏的解決方式是直接指定IP。經過修改apollo-adminservice或apollo-configservice 的bootstrap.yml文件,指定apollo-configservice和apollo-adminservice的IP端口。

解壓源碼文件,經過 apollo-1.3.0\apollo-adminservice\src\main\resources 找到 bootstrap.yml 文件,添加如下配置:

eureka:
  instance:
    ip-address: xx.xx.xx.xx
    hostname: ${hostname:47.99.92.76}
    preferIpAddress: true
    status-page-url-path: /info
    health-check-url-path: /health
  client:
    serviceUrl:
      # This setting will be overridden by eureka.service.url setting from ApolloConfigDB.ServerConfig or System Property
      # see com.ctrip.framework.apollo.biz.eureka.ApolloEurekaClientConfig
      defaultZone: http://${eureka.instance.hostname}:8080/eureka/
    healthcheck:
      enabled: true
    eurekaServiceUrlPollIntervalSeconds: 60

management:
  health:
    status:
      order: DOWN, OUT_OF_SERVICE, UNKNOWN, UP 

ip-address是我阿里雲的公有IP,其它部署環境同理。

 

經過 apollo-1.3.0\apollo-configservice\src\main\resources 找到 bootstrap.yml 文件,配置同上。

 

同時咱們還須要配置下MySQL數據庫的連接信息,經過 apollo-1.3.0\scripts 找到 build.sh 文件,編輯連接信息:

# apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=xxx
apollo_config_db_password=xxx

# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=xxx
apollo_portal_db_password=xxx

由於個人MySQL就是部署在同一個阿里雲上,因此就使用localhost,你們酌情修改。

 

Apollo依賴於MySQL,咱們須要先把其對應的數據庫跑出來,經過如下路徑加載兩個sql文件:

Configdb:apollo-1.3.0\scripts\db\migration\configdb

Portaldb:apollo-1.3.0\scripts\db\migration\portaldb

 

配置就到這裏,接下來咱們要安裝Maven環境來編譯源碼:

 

 

1.安裝maven

wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

Windows環境經過本文安裝:http://www.javashuo.com/article/p-atxqppei-nb.html

二、解壓安裝

tar -zxvf apache-maven-3.3.9-bin.tar.gz 

mv apache-maven-3.3.9 /usr/local/maven-3.3.9

 

三、配置環境變量

vi /etc/profile

#在適當的位置添加

export M2_HOME=/usr/local/maven3  (這裏須要制定你的安裝目錄 自定義的哈)

export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

 

四、使配置生效

保存退出後運行下面的命令使配置生效,或者重啓服務器生效。

source /etc/profile

 

五、驗證版本

mvn -v

 

6.配置阿里雲倉庫,國內速度快

在maven的settings.xml 文件裏配置mirrors的子節點,添加以下mirror:

<mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>*</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror> 

 

7.阿里雲cd到源碼文件夾路徑 apollo-1.3.0\scripts ,執行如下命令編譯源碼:

./build.sh

該腳本會依次打包apollo-configservice, apollo-adminservice, apollo-portal。

 

8.編譯完成後

獲取位於apollo-configservice/target/目錄下的apollo-configservice-x.x.x-github.zip。解壓後執行scripts/startup.sh便可。如需中止服務,執行scripts/shutdown.sh.

獲取位於apollo-adminservice/target/目錄下的apollo-adminservice-x.x.x-github.zip。解壓後執行scripts/startup.sh便可。如需中止服務,執行scripts/shutdown.sh.

獲取位於apollo-portal/target/目錄下的apollo-portal-x.x.x-github.zip。解壓後執行scripts/startup.sh便可。如需中止服務,執行scripts/shutdown.sh.

 

OK,上面3個啓動後,咱們就能夠經過Ip:8070 訪問Apollo的UI界面的,經過默認的 帳戶密碼登陸:apollo/admin

 

經過IP:8080訪問Eureka的UI界面查看被註冊的configure和admin兩個進程。

 

 

 

2、新建.Net Core API項目試用

1.新建.net core api項目,經過nuget引入項目包:Com.Ctrip.Framework.Apollo.Configuration。

2.在Program.cs中添加以下代碼:

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, builder) =>
            {
                builder
                .AddApollo(builder.Build().GetSection("apollo"))
                .AddDefault();
            })
                .UseStartup<Startup>();
    }

3.appsettings.json中進行以下配置,咱們這裏試用默認自帶的SimpleApp測試:

{
  "apollo": {
    "AppId": "SampleApp",
    "MetaServer": "http://47.99.92.76:8080",
    "Env": "Dev"
  }
}

 

這裏配置的意思是客戶端須要經過Eureka查詢Configure服務的地址,從而獲取配置信息。

  private IConfiguration _configuration;

        public ValuesController(IConfiguration configuration)
        {
            _configuration = configuration;
        }

        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            string title = _configuration["timeout"];
            return new string[] { "value1", "value2", title };
        }

 

運行項目查看:

OK,運行成功,更多信息你們能夠去官方gitHub查看哦,目前博主所在的公司已經使用Apollo好久了,並且.net 端一個分支的維護者仍是博主公司架構組的一位同事,就是下面這個:

 

看下使用Apollo後的項目運行圖,服務配置數據能夠正常請求:

 

今天就到這了,12點睡覺了!!

相關文章
相關標籤/搜索