日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apollo的基本概念和集成实战

發(fā)布時(shí)間:2023/12/2 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apollo的基本概念和集成实战 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基本概念

使用場景

是一個(gè)分布式的配置中心。適用于微服務(wù);

核心功能

  • 集中管理不同環(huán)境,不同集群的配置;
  • 配置修改后可以實(shí)時(shí)推送到應(yīng)用端;
  • 具備規(guī)范的權(quán)限,流程治理特性;
  • 開發(fā)技術(shù)

    • 服務(wù)端使用springboot,springcloud開發(fā),打包后可以直接運(yùn)行,無需安裝額外的tomcat;
    • java客戶端不依賴任何框架,對Spring,SpringBoot的客戶端也有額外支持
    • .net客戶端不依賴任何框架

    概念

    縮寫全稱說明
    FAT功能測試環(huán)境
    UAT集成測試環(huán)境
    PRO生產(chǎn)環(huán)境
    DEV開發(fā)環(huán)境

    詳細(xì)功能

  • 統(tǒng)一管理不同環(huán)境,不同集群,不同命名空間的配置;
  • 同一份代碼可以部署在不同的集群,可以有不同的配置,比如zk地址
  • 通過命名空間可以方便的支持不同應(yīng)用共享同一份配置,同時(shí)還允許應(yīng)用對共享的配置進(jìn)行覆蓋;
  • 配置修改實(shí)時(shí)生效 (用戶在后臺修改完配置發(fā)布后,客戶端可以在1s內(nèi)收到最新的配置并通知應(yīng)用程序)
  • 版本發(fā)布概念, (所有的配置發(fā)布都有版本概念,可以方便的支持配置的回滾)
  • 灰度發(fā)布(配置發(fā)布后,支隊(duì)部分應(yīng)用實(shí)例生效,等觀察一段時(shí)間后在推送給所有的應(yīng)用)
  • 權(quán)限管理,發(fā)布審核,操作審計(jì)
  • 客戶端配置信息監(jiān)控(方便的看到配置被哪些實(shí)例使用)
  • 支持多種語言,java和.net ,通過http接口使用也是支持的;
  • 提供開放平臺api給到其它系統(tǒng)修改和發(fā)布操作;
  • 部署簡單
  • 后臺使用

    后臺界面操作

    客戶端接入文檔

    后臺操作

  • 創(chuàng)建項(xiàng)目
  • 分配管理員,(管理項(xiàng)目的權(quán)限分配,創(chuàng)建集群,創(chuàng)建namespace)
  • 分配配置的修改和發(fā)布權(quán)限
  • 添加配置項(xiàng) ,修改配置項(xiàng)
  • 發(fā)布配置,回滾配置;
  • 讀取配置是在應(yīng)用端使用; 具體見客戶端接入文檔;
  • 公共組件的操作

    公共組件: 提供給應(yīng)用使用的其它組織的客戶端代碼,比如cat的客戶端;本質(zhì)上也是應(yīng)用的一部分;
    區(qū)別 : 通常情況下,公共組件的使用的配置由原始開發(fā)團(tuán)隊(duì)維護(hù),但是實(shí)際的應(yīng)用在運(yùn)行時(shí),環(huán)境不一樣,所以我們也允許應(yīng)用在實(shí)際使用的時(shí)候能夠覆蓋公共組件的部分配置;
    需要自己創(chuàng)建自己唯一的namespace ;

    公共組件的操作

  • 創(chuàng)建項(xiàng)目
  • 分配項(xiàng)目管理員權(quán)限
  • 創(chuàng)建namespace
  • 添加配置項(xiàng),發(fā)布;
  • 公共配置的讀取
  • 應(yīng)用關(guān)聯(lián)公共組件并覆蓋公共組件的配置項(xiàng)
  • 集群獨(dú)立配置

  • 添加集群,默認(rèn)集群;
  • 多個(gè)appId使用同一份配置
  • 同公共組件,關(guān)聯(lián)namespace,寫入公共配置,或者覆蓋公共配置
  • 灰度發(fā)布
    操作

  • 創(chuàng)建灰度
  • 灰度配置
  • 灰度規(guī)則的新增,修改
  • 灰度發(fā)布
  • 全量發(fā)布,放棄灰度
  • 發(fā)布?xì)v史
  • 客戶端接入

    要求:jdk1.7+ , guava15.0+

    客戶端配置參數(shù)

  • app.id (systemProperty > System Environment > springboot application.properties > META-INF/app.properties) 對應(yīng)項(xiàng)目的id
  • apollo.meta 訪問地址 (SystemProperty > SpringBoot > SystemEnvironment>/opt/settings/server.properties > app.properties)
  • 本地緩存路徑 /opt/data/{appId}/config-cache/ key: apollo.cacheDir
  • 環(huán)境配置 key : env
  • 集群配置 key: apollo.cluster
  • 客戶端依賴

    <dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.1.0</version></dependency>

    接入方式對比

    接入方式特點(diǎn)
    api靈活,功能完備
    springplaceholder方式
    springboot@ConfigurationProperties

    API接入

    獲取application namespace配置

    Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null String value = config.getProperty(someKey, someDefaultValue);

    獲取公共namespace

    String somePublicNamespace = "CAT"; Config config = ConfigService.getConfig(somePublicNamespace); //config instance is singleton for each namespace and is never null String value = config.getProperty(someKey, someDefaultValue);

    獲取非properties格式的namespace配置

    Config config = ConfigService.getConfig("application.yml"); String value = config.getProperty(someKey, someDefaultValue);

    xml格式文件獲取

    String someNamespace = "test"; ConfigFile configFile = ConfigService.getConfigFile("test", ConfigFileFormat.XML); String content = configFile.getContent();

    事件監(jiān)聽

    Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null config.addChangeListener(new ConfigChangeListener() {@Overridepublic void onChange(ConfigChangeEvent changeEvent) {System.out.println("Changes for namespace " + changeEvent.getNamespace());for (String key : changeEvent.changedKeys()) {ConfigChange change = changeEvent.getChange(key);System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));}} });

    spring方式接入

    基于xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:apollo="http://www.ctrip.com/schema/apollo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd"><apollo:config order="2"/><!-- 這個(gè)是最復(fù)雜的配置形式,指示Apollo注入FX.apollo和application.yml namespace的配置到Spring環(huán)境中,并且順序在application前面 --><apollo:config namespaces="FX.apollo,application.yml" order="1"/><bean class="com.ctrip.framework.apollo.spring.TestXmlBean"><property name="timeout" value="${timeout:100}"/>

    基于javaconfig

    //這個(gè)是最復(fù)雜的配置形式,指示Apollo注入FX.apollo和application.yml namespace的配置到Spring環(huán)境中,并且順序在application前面 @Configuration @EnableApolloConfig(order = 2) public class SomeAppConfig {@Beanpublic TestJavaConfigBean javaConfigBean() {return new TestJavaConfigBean();} } @Configuration @EnableApolloConfig(value = {"FX.apollo", "application.yml"}, order = 1) public class AnotherAppConfig {}

    springboot方式接入

    直接配置屬性

    #加載應(yīng)用對應(yīng)的application namespace的配置apollo.bootstrap.enabled = true#加載其它namespace 的配置apollo.bootstrap.namespaces = application,FX.apollo,application.yml#在日志系統(tǒng)啟動之前加載阿波羅apollo.bootstrap.eagerLoad.enabled=true

    其它說明

    一些公共的注解

    新增的spring注解

    • @ApolloConfig
      用來自動注入Config對象
    • @ApolloConfigChangeListener
      用來自動注冊ConfigChangeListener
    • @ApolloJsonValue
      用來把配置的json字符串自動注入為對象

    ### 配置的遷移

    配置的遷移

  • apollo中創(chuàng)建對應(yīng)的項(xiàng)目;
  • 在應(yīng)用中創(chuàng)建好META-INF/app.properties,并配置好;
  • 原來的配置文件,轉(zhuǎn)換為properties,貼到apollo后臺;
  • 刪除本地的配置;
  • ### 本地開發(fā)

  • 修改 /opt/settins/server.properties
    設(shè)置env = Local
  • 準(zhǔn)備本地配置文件 位置:
    Mac/Linux: /opt/data/{appId}/config-cache
    Windows: C:\opt\data{appId}\config-cache
  • 修改本地配置不會檢測到實(shí)時(shí)變化,需要重啟應(yīng)用;
  • 現(xiàn)有項(xiàng)目改造步驟

  • 去掉disconf的依賴,找到對應(yīng)的xml,去掉申明的配置bean;
  • 搜索對應(yīng)的@Disf,如果在類上,直接去掉,如果在方法或者字段上,替換為@Value注解;
  • 增加apollo的xml配置;
  • <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xmlns:apollo="http://www.ctrip.com/schema/apollo"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://code.alibabatech.com/schema/dubbohttp://files.sports.lifesense.com/xsd/dubbo.xsdhttp://www.ctrip.com/schema/apollohttp://www.ctrip.com/schema/apollo.xsd"><apollo:config order="1"/><apollo:config order="2" namespaces="lx-doctor.redis,lx-doctor.global,lx-doctor.filesystem,lx-doctor.kafka,lx-doctor.dubbo,log4j2.xml"/>
  • 因?yàn)橹暗囊蕾囶惵窂较麓嬖趍ysql.properties ; 而apollo沒有生成那么多的文件;
  • 在apollo后臺,從disconf后臺中把項(xiàng)目都有的配置放到application.properties下;
  • 新建私有命名空間 log4j2.xml,把日志配置copy,放到里面發(fā)布;
  • 如有跟公共配置相同的key,需要重寫的,則關(guān)聯(lián)公共命名空間重寫;
  • 啟動程序,解決編譯錯(cuò)誤;
  • 轉(zhuǎn)載于:https://www.cnblogs.com/snidget/p/11363929.html

    總結(jié)

    以上是生活随笔為你收集整理的Apollo的基本概念和集成实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。