zoukankan      html  css  js  c++  java
  • 学习使用Apollo配置中心

    Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端。

    Apollo官网地址

    如何安装服务端可以按照上面官网的步骤。

    这里主要说明一下应用如何接入apollo。

    应用接入apollo步骤:

    1、Appid

    确保classpath:/META-INF/app.properties文件存在,并且其中内容形如:app.id=YOUR-APP-ID

    服务端的appid

    2、Environment

    应用在不同的环境可以有不同的配置, Environment可以通过以下3种方式的任意一个配置:

    • 2.1 通过Java的System Property env来指定环境
      -Denv=YOUR-ENVIRONMENT
    • 2.2 通过操作系统的System Environment env来指定环境
    • 2.3 通过配置文件来指定env=YOUR-ENVIRONMENT
      对于Mac/Linux,文件位置为/opt/settings/server.properties
      对于Windows,文件位置为C:optsettingsserver.properties
      目前,env支持以下几个值(大小写不敏感):
      DEV, FAT, UAT, PRO

    服务端的environment

    3、本地缓存

    Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,当去服务器读取配置失败时,会使用本地缓存的。

    Mac/Linux: /opt/data/{appId}/config-cache

    Windows: C:optdata{appId}config-cache

    确保目录存在,且应用有读写权限。

    4、添加依赖

    <dependency>
        <groupId>com.ctrip.framework.apollo</groupId>
        <artifactId>apollo-client</artifactId>
        <version>0.6.2</version>
    </dependency>
    
    <repository>
    	<id>internal.repo</id>
    	<url>https://raw.github.com/ctripcorp/apollo/mvn-repo/</url>
    </repository>
    

    5、指定服务端

    通过Java的System Property env来指定

    -Ddev_meta=http://192.168.30.27:8018

    6、读取配置

    通过namespace读取配置,如果不指定则默认拿application

    • 6.1 api方式

    通过api方式获取的配置,修改时不用重启项目,直接生效。

    Config config = ConfigService.getAppConfig(); //ConfigService.getConfig(Namespace);
    String key = "key"; //key
    String defaultValue = "defaultValue"; //默认值,读取不到配置就会使用默认值,建议都加上默认值
    String value = config.getProperty(key, defaultValue);
    

    监听配置修改事件

    Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null
    config.addChangeListener(new ConfigChangeListener() {
        @Override
        public 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()));
            }
        }
    });
    
    • 6.2 结合Spring方式

    6.2.1 基于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.xsd
           http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd">
        <!-- 这个是最简单的配置形式,一般应用用这种形式就可以了,用来指示Apollo注入application namespace的配置到Spring环境中 -->
        <apollo:config/>
        <!-- 这个是稍微复杂一些的配置形式,指示Apollo注入FX.apollo和FX.soa namespace的配置到Spring环境中 -->
        <apollo:config namespaces="FX.apollo,FX.soa"/>
        <bean class="com.ctrip.framework.apollo.spring.TestXmlBean">
            <property name="timeout" value="${timeout:100}"/>
            <property name="batch" value="${batch:200}"/>
        </bean>
    </beans>
    

    6.2.2 基于Java的配置

    使用@Value(${key:defaultValue})

    public class TestJavaConfigBean {
      @Value("${timeout:100}")
      private int timeout;
      private int batch;
     
      @Value("${batch:200}")
      public void setBatch(int batch) {
        this.batch = batch;
      }
     
      public int getTimeout() {
        return timeout;
      }
     
      public int getBatch() {
        return batch;
      }
    }
    

    @ApolloConfig用来自动注入Config对象
    @ApolloConfigChangeListener用来自动注册ConfigChangeListener

    public class TestApolloAnnotationBean {
      @ApolloConfig("application")
      private Config anotherConfig; //inject config for namespace application
     
      //config change listener for namespace application
      @ApolloConfigChangeListener("application")
      private void anotherOnChange(ConfigChangeEvent changeEvent) {
        //do something
      }
     
    }
    

    服务端的namespace:

  • 相关阅读:
    [转]解密回声消除技术之二(应用篇)
    [转]解密回声消除技术之一(理论篇)
    Linux命令练级初级
    [转]win7+ubuntu 13.04双系统安装方法
    c/c++常用代码--清空目录
    c++程序开发利器
    vc2005 编译ACE-6.2.0
    Facebook Login api
    IIS7.0 下使用Intelligencia.UrlRewriter时Session为空问题
    无后缀名伪静态路径在IIS7.0的网站提示 "404
  • 原文地址:https://www.cnblogs.com/andyfengzp/p/7243847.html
Copyright © 2011-2022 走看看