netcore項目中使用 SpringCloudConfig 和apollo做配置中心

版權所有,轉載請註明出處 https://www.cnblogs.com/netqq/p/14251403.html

   

一、使用apollo作爲配置中心

  首先apollo 項目簡介和安裝請自行百度,本文只介紹如何使用

     坑:

  1、window10下使用腳本無法運行起apollo的項目,進入項目目錄,地址欄輸入cmd,使用以下命令可以運行起apollo項目,請依次各個運行

java  -jar   apollo-xxxxxx.jar

  

  運行前的配置:

  1、確保8080,8070,8090端口未被佔用,如果佔用請自行修改 apollo 的運行端口

  2、修改 apolloconfigdb.serverconfig 表 eureka.service.url  的爲公司的Eureka  地址

 

  3、修改apolloportaldb.serverconfig 表 apollo.portal.envs ,增加test,pro兩個環境變量,多個值之間使用英文逗號分隔

 

 

 

 

    啓動apollo項目

    

 

配置aollo   

在瀏覽器中分別訪問8070 8080  8090端口號

  

 

 

   使用默認賬號apollo/admin 登錄到apollo配置中心(8070端口)

     1、點擊右上角菜單,進入系統參數頁面

 

 

    查找organizations  key,在表單中新增或者修改,1分鐘後生效,此處數據在創建項目中會用到。

    2、創建一個項目

    3、在左側選擇環境,右側添加配置鍵值對,作爲netcore的程序員,善用json,所以,在左側點擊添加 Namespace

      選中框中的選項  ,記住  “名稱”  這個選項,下問中要用到,也可以在項目中心查看

 

      提交後就可以存放json格式的數據了

    4、填寫此namespace 下的配置項

 在netcore 中使用 apollo

   筆者使用的框架是netcore3.1

  1、配置appsetting.json ,增加apollo配置節點

 "apollo": {
    "AppId": "f664d4241996307a", // 應用id
    "MetaServer": "http://localhost:8080",   //localhost:8080 是apollo 的服務地址,如果apollo在本地這使用localhost即可
    "ConfigServer": "http://localhost:8080",
    "Env": "DEV"    //要使用的環境變量,上文數據庫中有配置過環境
  },

 

  2、安裝apollo客戶端引用

PM>Install-Package Com.Ctrip.Framework.Apollo.Configuration 

 

  3、修改Program.cs 中的  Host 配置項

 

 .ConfigureAppConfiguration((context, configBuiler) =>
               {
                   var env = context.HostingEnvironment;
                   configBuiler.SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);

                   if (env.IsDevelopment())
                   {
                       var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
                       if (appAssembly != null)
                       {
                           configBuiler.AddUserSecrets(appAssembly, optional: true);
                       }
                   }
                   configBuiler.AddApollo(configBuiler.Build().GetSection("apollo"))    //apollo配置中心,加載配置中心
                          .AddNamespace("appsettings", ConfigFileFormat.Json) // 引入 namespace:appsettings  ,在apollo配置中心可查
                          .AddDefault(); // 默認 namespace: application

                   configBuiler.AddEnvironmentVariables();  //加載環境變量
                   configBuiler.AddConfigServer();          //加載遠程配置中心
                   if (args != null)
                   {
                       configBuiler.AddCommandLine(args);   //控制檯命令參數最後加載
                   }
               })

 

  至此,netcore 使用 apollo作爲配置中心大概做法已經完成

擴展: apollo,此處使用的是單機配置,也可以使用slb 給apolloadmin和apolloconfig  做集羣。因爲筆者搜遍全網也沒有找到apollo   通過Eureka 註冊中心提供服務的案例,所以使用slb做集羣也可以

 

二、使用git作爲配置中心(僞)

    安裝 Steeltoe.Extensions.Configuration.ConfigServerCore 引用

    此組件依賴服務發現:Steeltoe.Discovery.ClientCore ,Steeltoe.Discovery.Eureka

   說明: 公司自己的Eureka 註冊中心,公司使用git作爲配置中心版本管理,有自己的配置中心項目,並且注入到Eureka中心

  由於公司使用spring全家桶,所以配置中心也在Eureka 中註冊了,項目讀取配置時候只需要配置 “配置中心”的服務id 這種方式,所以你需要首先運行起來一個Euraka註冊中心,Spring Cloud Config 配置中心

配置中心註冊到Euraka  

  1、配置 appsetting.json ,增加spring 節點  

  

"spring": {
    "application": {
      "name": "xxx-serverId"
    },
    "cloud": {
      "config": {
        "enabled": true,
        "env": "test",
        "password": "123456",
        "username": "user",
        "label": "master",
        "discovery": {
          "serviceId": "config-content-serverId",
          "enabled": true
        }
      }
    }
  },
  "eureka": { //eureka註冊中心
    "client": { //作爲client使用
      "serviceUrl": "http://xxxx.inner.com:8889/eureka/",
      "shouldFetchRegistry": true, //是否啓用發現服務
      "shouldRegisterWithEureka": true //是否註冊到服務中心
    },
    "instance": { //作爲服務使用
      "port": 5002,
      "PreferIpAddress": true,
      "instanceId": "" //如果不填寫,則使用ip:port格式,此處需要在staup 中手動實現,Steeltoe實現的是計算機名稱+端口號
    }
  },

   節點說明: config節點用於獲取配置中心的配置 ,eureka 用戶服務註冊和服務發現,config 依賴於服務發現

  2、Program.cs  中 host 增加配置

  

 Host.CreateDefaultBuilder(args)

               .ConfigureAppConfiguration((context, configBuiler) =>
               {
                   var env = context.HostingEnvironment;
                   configBuiler.SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);

                   if (env.IsDevelopment())
                   {
                       var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
                       if (appAssembly != null)
                       {
                           configBuiler.AddUserSecrets(appAssembly, optional: true);
                       }
                   }
                   configBuiler.AddApollo(configBuiler.Build().GetSection("apollo"))    //加載配置中心
                          .AddNamespace("appsettings", ConfigFileFormat.Json) // 引入 TEST1.Common 命名空間
                          .AddDefault(); // 默認 namespace: application

                   configBuiler.AddEnvironmentVariables();  //加載環境變量
                   configBuiler.AddConfigServer();          //用於加載配置中心的配置,通過 appsetting.json  config節點的配置調用
                   if (args != null)
                   {
                       configBuiler.AddCommandLine(args);   //控制檯命令參數最後加載
                   }
               })

 

   3、因爲要使用服務治理,所以需要將服務治理加入到ioc容器中

    在   public void  ConfigureServices(IServiceCollection services) 方法中加入如下代碼

services.AddDiscoveryClient(Configuration);
//服務治理相關組件 services.Configure<EurekaInstanceOptions>(options => //重新設置 { if (string.IsNullOrWhiteSpace(options.InstanceId)) { options.InstanceId = options.IpAddress + ":" + options.Port; } });

 

   4、服務治理相關配置加入到了IOC中,但是並未啓用,所以需要啓用

      在 public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime, IServiceProvider svp, ILoggerFactory loggerFactory)   中啓用服務治理功能

  
//使用服務治理 app.UseDiscoveryClient();

   擴展:筆者搜遍全網也未找到通過Eureka 註冊中心獲取配置的示例,此示例經過筆者兩天查找和翻閱資料實現,希望筆者的貢獻能讓netcore 猿 少寫一個bug,少奮鬥一個小時,少掉10跟頭髮,希望你眼中有光,心中有嚮往

 

參考資料: 《steeltoe》  https://docs.steeltoe.io/api/v3/configuration/config-server-provider.html

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

      《apollo分佈式部署》https://github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97

  

版權所有,轉載請註明出處  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章