1. 程式人生 > 其它 >3修改環境_apollo配置中心新增自定義環境

3修改環境_apollo配置中心新增自定義環境

技術標籤:3修改環境

1e13b645353db6ed44ffe2e2d4921b45.png

1. apollo部署

本次部署環境為DEV(開發環境)、SIT(整合測試環境)、UAT(使用者驗收測試環境)、PRO(生產環境),採用apollo版本為1.4.0,相關的部署文件可參考官網。

2. apollo專案介紹

Apollo(阿波羅)是攜程框架部門研發的分散式配置中心,能夠集中化管理應用不同環境、不同叢集的配置,配置修改後能夠實時推送到應用端,並且具備規範的許可權、流程治理等特性,適用於微服務配置管理場景。

apollo主要專案如下:

apollo-configservice:提供配置獲取介面,提供配置更新推送介面,介面服務物件為Apollo客戶端。

apollo-adminservice:提供配置管理介面,提供配置修改、釋出等介面,介面服務物件為Portal,以及Eureka。

apollo-portal:提供Web介面供使用者管理配置。

apollo-client:Apollo提供的客戶端程式,為應用提供配置獲取、實時更新等功能。

a94883d32ca6e0128fe66ea8cf9d08f4.png

3.自定義apollo環境

自定義一個apollo部署環境也很簡單,比如我們加入一個SIT環境,我們需要進行如下操作:

1. 修改apollo-core專案,com.ctrip.framework.apollo.core.enums.Env,在其中加入SIT列舉:

public enum Env{  LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN,SIT;  ........}

2.修改apollo-core專案,com.ctrip.framework.apollo.core.enums.EnvUtils,在其中加入SIT列舉的轉換邏輯:

public final class EnvUtils {  //新增SIT環境規則public static Env transformEnv(String envName) {if (StringUtils.isBlank(envName)) {return Env.UNKNOWN;}switch (envName.trim().toUpperCase()) {case "LPT":return Env.LPT;case "FAT":case "FWS":return Env.FAT;case "UAT":return Env.UAT;case "PRO":case "PROD": //just in casereturn Env.PRO;case "DEV":return Env.DEV;case "LOCAL":return Env.LOCAL;case "TOOLS":return Env.TOOLS;case "SIT":return Env.SIT;default:return Env.UNKNOWN;}}}

3.修改apollo-core專案,com.ctrip.framework.apollo.core.internals.LegacyMetaServerProvider類,增加讀取SIT環境的meta server地址邏輯:

public class LegacyMetaServerProvider implements MetaServerProvider {  // make it as lowest as possible, yet not the lowest  public static final int ORDER = MetaServerProvider.LOWEST_PRECEDENCE - 1;  private static final Map domains = new HashMap<>();  public LegacyMetaServerProvider() {    initialize();  }  private void initialize() {    Properties prop = new Properties();    prop = ResourceUtils.readConfigFile("apollo-env.properties", prop);    domains.put(Env.LOCAL, getMetaServerAddress(prop, "local_meta", "local.meta"));    domains.put(Env.DEV, getMetaServerAddress(prop, "dev_meta", "dev.meta"));    domains.put(Env.FAT, getMetaServerAddress(prop, "fat_meta", "fat.meta"));    domains.put(Env.UAT, getMetaServerAddress(prop, "uat_meta", "uat.meta"));    domains.put(Env.LPT, getMetaServerAddress(prop, "lpt_meta", "lpt.meta"));    domains.put(Env.PRO, getMetaServerAddress(prop, "pro_meta", "pro.meta"));    domains.put(Env.SIT, getMetaServerAddress(prop, "sit_meta", "sit.meta"));  }  ................}

4. 修改log日誌檔案生成路徑:

修改apollo-adminservice專案下/script/startup.sh,日誌路徑替換為:LOG_DIR=/usr/local/nlp/logs/apollo-adminservice/100003172。修改apollo-configservice專案下/script/startup.sh,日誌路徑替換為:LOG_DIR=/usr/local/nlp/logs/apollo-configservice/100003171。修改apollo-portal專案下/script/startup.sh,日誌路徑替換為:LOG_DIR=/usr/local/nlp/logs/apollo-portal/100003173。

經過如上四步我們完成了SIT環境的新增。

4.apollo打包

由於我們存在DEV,UAT,SIT,PRO四套環境,apollo-configservice,apollo-adminservice專案需要切換四次環境打包。apollo-portal專案只需打包一次。

#dev 環境mvn clean package -DskipTests -pl apollo-configservice,apollo-adminservice -am -Dapollo_profile=github -Dspring_datasource_url=jdbc:mysql://10.xxx.xx25:3519/apollo_configdb_dev?characterEncoding=utf8 -Dspring_datasource_username=wxt_apollo -Dspring_datasource_password=xxxx#uat環境mvn clean package -DskipTests -pl apollo-configservice,apollo-adminservice -am -Dapollo_profile=github -Dspring_datasource_url=jdbc:mysql://10.xxx.xx.25:3519/apollo_configdb_uat?characterEncoding=utf8 -Dspring_datasource_username=wxt_apollo -Dspring_datasource_password=xxxx#sit環境mvn clean package -DskipTests -pl apollo-configservice,apollo-adminservice -am -Dapollo_profile=github -Dspring_datasource_url=jdbc:mysql://10.xxx.xx.25:3519/apollo_configdb_sit?characterEncoding=utf8 -Dspring_datasource_username=wxt_apollo -Dspring_datasource_password=xxxx#pro環境mvn clean package -DskipTests -pl apollo-configservice,apollo-adminservice -am -Dapollo_profile=github -Dspring_datasource_url=jdbc:mysql://10.xxx.xx.25:3519/apollo_configdb_pro?characterEncoding=utf8 -Dspring_datasource_username=wxt_apollo -Dspring_datasource_password=xxx#portalmvn clean package -DskipTests -pl apollo-portal -am -Dapollo_profile=github,auth -Dspring_datasource_url=jdbc:mysql://10.180.14.25:3519/apollo_portaldb?characterEncoding=utf8 -Dspring_datasource_username=yrz_apollo -Dspring_datasource_password=xxxx -Ddev_meta=http://10.xxx.xx.127:8080 -Dsit_meta=http://10.xxx.xx.129:8080 -Duat_meta=http://10.xxx.xx.128:8080 -Dpro_meta=http://10.xxx.xx.130:8080

5.apollo部署

在自己的伺服器上新建一個目錄 /usr/local/wxt/apollo_xxx/ 將官方提供的安裝包直接下載到這個目錄下,然後解壓:

unzip apollo-adminservice-1.4.0-github.zip -d apollo-adminservice-1.4.0-githubunzip apollo-configservice-1.4.0-github.zip -d apollo-configservice-1.4.0-githubunzip apollo-portal-1.4.0-github.zip -d apollo-portal-1.4.0-github

6. 啟動專案

在每一個工程的解壓包中,都有一個 scripts 資料夾,這裡面是 Apollo 工程的啟動指令碼。三個工程分別先後啟動:apollo-configservice、apollo-adminservice、apollo-portal,就是分別執行這三個工程下面的 /scripts/startup.sh 指令碼即可,關閉執行的是

7. apollo 客戶端呼叫規則

apollo meta由核心服務統一進行了封裝,各服務只需在pom檔案引入microservice-apollo服務即可。

1.導包

com.wxt  microservice-apollo

2.新增配置檔案

新增bootstrap.yml,引入apollo相關配置

app:  id: microservice-gateway                                #從服務端獲取配置的唯一標識apollo:  cacheDir: /usr/local/wxt/config-data                    #本地快取路徑  bootstrap:    enabled: true    namespaces: application,eureka-gateway                #配置項集合

app.id 是應用的唯一身份標識,Apollo客戶端使用這個標識來獲取應用自己的私有Namespace配置。

apollo.cacheDir 為本地環境配置路徑。

apollo.bootstrap.namespaces 獲取遠端配置,多個時逗號分隔。

3.修改啟動項

修改啟動項新增如下註解:

@EnableApolloConfigpublic class MicroserviceGatewayApplication {...........}