学习使用Apollo配置中心

学习使用Apollo配置中心,第1张

学习使用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:\opt\settings\server.properties

    目前,env支持以下几个值(大小写不敏感):

    DEV, FAT, UAT, PRO

服务端的environment

3、本地缓存

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


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

Windows: C:\opt\data{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:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/586794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存