Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
通过对比,可以看出,生成环境中 Apollo 相比 Spring Cloud Config 更具有优势一些。
参照 https://github.com/ctripcorp/apollo/wiki/Quick-Start 搭建 Apollo 配置中心,文档写的很清楚,这里就赘述了。
搭建完成并启动后,访问 http://localhost:8070 ,界面如下。
输入用户名 apollo,密码 admin 后登录后,点击SampleApp进入配置界面。
创建一个springboot项目,主要代码如下。
添加 Apollo 客户端的依赖,为了编码方便引入commons-lang3。
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.3.0</version>
</dependency>
<!-- 为了编码方便,并非apollo 必须的依赖 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
###application.yml
server:
port: 8761
app:
id: springboot-apollo
apollo:
meta: http://127.0.0.1:8080
bootstrap:
enabled: true
eagerLoad:
enabled: true
logging:
level:
com:
gf:
controller: debug
配置说明:
@RestController
public class HelloController {
private static Logger logger = LoggerFactory.getLogger( HelloController.class );
@Value( "${server.port}" )
String port;
@GetMapping("hi")
public String hi(String name) {
logger.debug( "debug log..." );
logger.info( "info log..." );
logger.warn( "warn log..." );
return "hi " + name + " ,i am from port:" + port;
}
}
@SpringBootApplication
@EnableApolloConfig
public class SpringbootApolloApplication {
public static void main(String[] args) {
SpringApplication.run( SpringbootApolloApplication.class, args );
}
}
启动项目。现在需要去配置中心做些关于这个springboot客户端的一些配置。
第一步:访问http://localhost:8070 登录后,选择创建项目。
第二步:填写配置信息。
配置说明:
提交配置后会出现如下项目配置的管理页面。
第一步:点击 “新增配置”,配置需要管理的 application.properties 中的属性。
点击提交,之后按照同样的方法,新增需要动态管理的 application.properties 中的属性。
提交后,跳转到配置的管理界面:
配置只有在发布后才会真的被应用使用到,所以在编辑完配置后,需要发布配置。点击“发布按钮”。
填写发布相关信息,点击发布 。
在配置中心,修改 server.port 的值为 8762 并发布。
Postman 访问之前写个测试接口 http://127.0.0.1:8761/hi?name=zhangsan ,返回如下。
说明 客户端 获取到了 配置中心修改后的 server.port 的值 。
注意:
日志模块是每个项目中必须的,用来记录程序运行中的相关信息。一般在开发环境下使用DEBUG级别的日志输出,为了方便查看问题,而在线上一般都使用INFO或者ERROR级别的日志,主要记录业务操作或者错误的日志。那么问题来了,当线上环境出现问题希望输出DEBUG日志信息辅助排查的时候怎么办呢?修改配置文件,重新打包然后上传重启线上环境,以前确实是这么做的。
虽然上面我们已经把日志的配置部署到Apollo配置中心,但在配置中心修改日志等级,依然需要重启应用才生效,下面我们就通过监听配置的变化,来达到热更新的效果。
@Configuration
public class LoggerConfig {
private static final Logger logger = LoggerFactory.getLogger(LoggerConfig.class);
private static final String LOGGER_TAG = "logging.level.";
@Autowired
private LoggingSystem loggingSystem;
@ApolloConfig
private Config config;
@ApolloConfigChangeListener
private void configChangeListter(ConfigChangeEvent changeEvent) {
refreshLoggingLevels();
}
@PostConstruct
private void refreshLoggingLevels() {
Set<String> keyNames = config.getPropertyNames();
for (String key : keyNames) {
if (StringUtils.containsIgnoreCase(key, LOGGER_TAG)) {
String strLevel = config.getProperty(key, "info");
LogLevel level = LogLevel.valueOf(strLevel.toUpperCase());
loggingSystem.setLogLevel(key.replace(LOGGER_TAG, ""), level);
logger.info("{}:{}", key, strLevel);
}
}
}
}
关键点讲解:
application.yml 中配置的日志级别是 debug ,访问http://127.0.0.1:8761/hi?name=zhangsan ,控制台打印如下。
2019-03-05 18:29:22.673 DEBUG 4264 --- [nio-8762-exec-1] com.gf.controller.HelloController : debug log...
2019-03-05 18:29:22.673 INFO 4264 --- [nio-8762-exec-1] com.gf.controller.HelloController : info log...
2019-03-05 18:29:22.673 WARN 4264 --- [nio-8762-exec-1] com.gf.controller.HelloController : warn log...
现在在配置中心修改日志级别为 warn。
再次访问http://127.0.0.1:8761/hi?name=zhangsan ,控制台打印如下。
2019-03-05 19:07:19.469 WARN 4264 --- [nio-8762-exec-3] com.gf.controller.HelloController : warn log...
说明日志级别的配置,已经支持热更新了。关于apollo 的更多应用 ,可以参照github的文档。
源码 : https://github.com/gf-huanchupk/SpringBootLearning/tree/master/springboot-apollo
欢迎关注我的公众号《程序员果果》,关注有惊喜~~
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。