Apollo 分布式配置中心(补充)
1. Namespace
1.1. 什么是Namespace
Namespace是配置项的集合,类似于一个配置文件的概念。
Apollo在创建项目的时候,都会默认创建一个“application”的Namespace。顾名思义,“application”是给应用自身使用的,熟悉Spring Boot的同学都知道,Spring Boot项目都有一个默认配置文件application.yml。在这里application.properties就等同于“application”的Namespace。对于90%的应用来说,“application”的Namespace已经满足日常配置使用场景了。
1.2. 客户端如何获取Namespace

2. 重新构建
git clone https://github.com/ctripcorp/apollo.git
修改完代码后调用 ${YOUR-WORKSPACE}/apollo/script/build.sh
执行完bulid.sh以后会再各个项目的target目录下生产zip包
于是,我们就可以得到以下三个包
apollo-adminservice-1.5.0-SNAPSHOT-github.zip
apollo-configservice-1.5.0-SNAPSHOT-github.zip
apollo-portal-1.5.0-SNAPSHOT-github.zip
解压后修改数据库连接地址后,启动

3. 增加可用的环境
前面我们通过执行初始化脚本来初始化数据库,在脚本的最后插入了几条初始化数据

因此,可以通过修改 apollo.portal.envs 字段的值来添加激活的(可用的)环境。直接修改初始化脚本,或者脚本执行完以后再执行update。例如:
1 UPDATE ApolloPortalDB.ServerConfig SET value = 'local,dev,test,prod' WHERE id = ;
2 UPDATE ApolloPortalDB.ServerConfig SET value = '[{"orgId":"TEC","orgName":"技术部"}]' WHERE id = ;
访问 http://localhost:8070/ (apollo/admin)



本例中,增加了TEST环境,还增加了一个Namespace
4. API使用方式
API方式是最简单、高效使用Apollo配置的方式,不依赖Spring框架即可使用。
4.1. 获取默认namespace的配置
1 // config instance is singleton for each namespace and is never null
2 Config config = ConfigService.getAppConfig();
3 String someKey = "someKeyFromDefaultNamespace";
4 String someDefaultValue = "someDefaultValueForTheKey";
5 String value = config.getProperty(someKey, someDefaultValue);
通过上述的config.getProperty可以获取到someKey对应的实时最新的配置值。
另外,配置值从内存中获取,所以不需要应用自己做缓存。
4.2. 监听配置变化事件
监听配置变化事件只在应用真的关心配置变化,需要在配置变化时得到通知时使用,比如:数据库连接串变化后需要重建连接等。
如果只是希望每次都取到最新的配置的话,只需要按照上面的例子,调用config.getProperty即可。
1 // config instance is singleton for each namespace and is never null
2 Config config = ConfigService.getAppConfig();
3 config.addChangeListener(new ConfigChangeListener() {
4 @Override
5 public void onChange(ConfigChangeEvent changeEvent) {
6 System.out.println("Changes for namespace " + changeEvent.getNamespace());
7 for (String key : changeEvent.changedKeys()) {
8 ConfigChange change = changeEvent.getChange(key);
9 System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));
10 }
11 }
12 });
4.3. 获取公共Namespace的配置
1 String somePublicNamespace = "CAT";
2 Config config = ConfigService.getConfig(somePublicNamespace);
3 String someKey = "someKeyFromPublicNamespace";
4 String someDefaultValue = "someDefaultValueForTheKey";
5 String value = config.getProperty(someKey, someDefaultValue);
4.4. 获取非properties格式namespace的配置
apollo-client 1.3.0版本开始对yaml/yml做了更好的支持,使用起来和properties格式一致。
1 Config config = ConfigService.getConfig("application.yml");
2 String someKey = "someKeyFromYmlNamespace";
3 String someDefaultValue = "someDefaultValueForTheKey";
4 String value = config.getProperty(someKey, someDefaultValue);
5. 实时动态调整日志级别
这个功能很实用
引入依赖
1 <groupId>com.ctrip.framework.apollo</groupId>
2 <artifactId>apollo-client</artifactId>
3 <version>1.4.0</version>
4 </dependency>
日志级别配置
1 package com.cjs.example.config;
2
3 import com.ctrip.framework.apollo.Config;
4 import com.ctrip.framework.apollo.model.ConfigChange;
5 import com.ctrip.framework.apollo.model.ConfigChangeEvent;
6 import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;
7 import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
8 import lombok.extern.slf4j.Slf4j;
9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.boot.logging.LogLevel;
11 import org.springframework.boot.logging.LoggingSystem;
12 import org.springframework.context.annotation.Configuration;
13 import org.springframework.util.StringUtils;
14
15 import java.util.Set;
16
17 /**
18 * @author ChengJianSheng
19 * @date 2019-05-31
20 */
21 @Slf4j
22 @Configuration
23 public class LoggerConfig {
24
25 private static final String LOGGER_TAG = "logging.level.";
26
27 /**
28 * 注入默认的命名空间配置
29 */
30 @ApolloConfig
31 private Config config;
32
33 @Autowired
34 private LoggingSystem loggingSystem;
35
36 @ApolloConfigChangeListener
37 private void onChange(ConfigChangeEvent configChangeEvent) {
38 System.out.println("配置发生变化");
39 System.out.println("Changes for namespace " + configChangeEvent.getNamespace());
40 for (String key : configChangeEvent.changedKeys()) {
41 ConfigChange change = configChangeEvent.getChange(key);
42 System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));
43 }
44
45 Set<String> keyNames = config.getPropertyNames();
46 for (String key : keyNames) {
47 if (StringUtils.isEmpty(key)) {
48 continue;
49 }
50 if (!key.startsWith(LOGGER_TAG)) {
51 continue;
52 }
53
54 String loggerName = key.replace(LOGGER_TAG, "");
55 String strLevel = config.getProperty(key, "info");
56 LogLevel level = LogLevel.valueOf(strLevel.toUpperCase());
57 loggingSystem.setLogLevel(loggerName, level);
58
59 log.info("{}:{}", key, strLevel);
60 }
61 }
62
63 }
application.properties
1 server.port=
2
3 app.id=
4 env=LOCAL
5 apollo.meta=http://localhost:8080
6 apollo.cacheDir=/Users/chengjiansheng/data
7 apollo.bootstrap.enabled=true
修改配置


5. 工程结构




https://github.com/chengjiansheng/apollo-demo
6. 文档
Apollo 分布式配置中心(补充)的更多相关文章
- Apollo分布式配置中心部署以及使用
一.简介Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场 ...
- Apollo 分布式配置中心
1. 介绍 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置 ...
- 携程apollo分布式配置中心
原理 : apollo的部署 jdk 要求8以上 mysql 5.7以上 执行build.sh 这样就把configService,adminService 打包到对应的target下面 把这个放到l ...
- 分布式配置中心 携程(apollo)
1.传统配置文件与分布式配置文件区别 传统配置文件:如果修改了配置文件,需要重新打包发布,重新发布服务,而且每个环境的变更配置文件,比较繁琐. 分布式配置文件:将配置文件注册到配置中心上去,可以使用分 ...
- 分布式配置中心Apollo
1,什么是分布式配置中心 项目中配置文件比较繁杂,而且不同环境的不同配置修改相对频繁,每次发布都需要对应修改配置,如果配置出现错误,需要重新打包发布,时间成本较高,因此需要做统一的分布式注册中心,能做 ...
- 分布式配置中心Apollo——QuickStart
分布式配置中心 剥离配置文件,实现动态修改,自动更新. [假设没有分布式配置中心,修改配置文件后都需要重启服务,对于数量庞多的微服务开发来说,就会非常繁琐] 分布式配置中心有哪些 disconf(依赖 ...
- 实践分布式配置中心Apollo
简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景 ...
- spring cloud 集成分布式配置中心 apollo(单机部署apollo)
一.什么是apollo? Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用 ...
- Apollo系列(一):分布式配置中心Apollo安装(Linux、Docker)
一.介绍 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...
随机推荐
- WebGL简易教程(十四):阴影
目录 1. 概述 2. 示例 2.1. 着色器部分 2.1.1. 帧缓存着色器 2.1.2. 颜色缓存着色器 2.2. 绘制部分 2.2.1. 整体结构 2.2.2. 具体改动 3. 结果 4. 参考 ...
- 分布式主键解决方案之--Snowflake雪花算法
0--前言 对于分布式系统环境,主键ID的设计很关键,什么自增intID那些是绝对不用的,比较早的时候,大部分系统都用UUID/GUID来作为主键,优点是方便又能解决问题,缺点是插入时因为UUID/G ...
- MySQL的5种时间类型的比较
日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 DATETIME 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 9999-12-31 23 ...
- 浅析vue混入(mixin)
vue中的混入,可以在一定程度上提高代码的复用性.通俗来说,混入类似于“继承”,当前组件对象继承于组件对象,一般情况下遵循“就近原则”.但是与继承不同的是,继承一般都跟随着属性的重写与合并,混入在不同 ...
- 本地搭建的gitbook添加导航折叠插件
如果有多个目录,Gitbook在浏览器上打开时,默认所有的目录都会打开,当目录比较多时,全部显示不利于阅读. 可以使用插件配置目录折叠,使得打开浏览器时这些目录默认是关闭的. 在执行gitbook i ...
- JS的静态类型检测,有内味儿了
我们知道 TypeScript 2.3 以后的版本支持使用--checkJs对.js文件进行类型检查和错误提示. 但是由于 JavaScript 是弱类型语言,在编写代码的时候,是无法检测变量的类型的 ...
- MongoDB一次节点宕机引发的思考(源码剖析)【华为云分享】
目录 简介 日志分析 副本集 如何实现 Failover 心跳的实现 electionTimeout 定时器 业务影响评估 参考链接 声明:本文同步发表于 MongoDB 中文社区,传送门:http: ...
- YUM平台的搭建
网络安全学习内容 三.挂载yum仓库 3.1连接映像文件 步骤如下: 1.右击映像文件,单击设置,选择CentOS映像文件 2.右击映像文件,单击连接 3.2挂载本地yum 打开终端,输入vim /e ...
- DP思想在斐波那契数列递归求解中的应用
斐波那契数列:1, 1, 2, 3, 5, 8, 13,...,即 f(n) = f(n-1) + f(n-2). 求第n个数的值. 方法一:迭代 public static int iterativ ...
- http状态码_____ 204/206/200
HTTP的状态码有很多种,主要有五个大类 1xx(临时响应) 2xx(成功) 3xx(已重定向) 4xx(请求错误) 5xx(服务器错误) 每个大类还对应一些具体的分类.平时我们接触比较多的是200. ...
