参考文档:
https://www.apolloconfig.com/#/zh/README
https://zhuanlan.zhihu.com/p/28723169
Apollo简介
Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
Apollo支持4个维度管理Key-Value格式的配置:
- application(应用)
- environment(环境)
- cluster(集群)
- namespace(命名空间)
总体设计:
上图简要描述了Apollo的总体设计,我们可以从下往上看:
- ConfigService
提供配置的读取、推送等功能,服务对象是Apollo客户端 - Admin Service
提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面) - Config Service和Admin Service 都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳,在Eureka之上我们架了一层Meta Server用于封装Eureka的服务发现接口,Client通过域名访问Meta Server获取Config Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试
- Portal
通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试
为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中。
集成
服务端开发使用的是Java,基于Spring Cloud和Spring Boot框架。客户端目前提供了Java和.Net两种实现。
注意的是,Java客户端方面:
支持Spring Placeholder,Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+)
Spring Boot项目集成:参考下面的部分
spring-boot集成方式(推荐)
通过application.properties/bootstrap.properties来配置,该方式能使配置在更早的阶段注入。
Demo
SpringBoot项目集成:
- 引入依赖:
<!--Apollo的客户端-->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.7.0</version>
</dependency>
- spring boot启动类上加上注解
@EnableApolloConfig
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableApolloConfig
public class SpringBootApolloApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootApolloApplication.class, args);
}
}
- 修改配置文件:
spring.application.name=spring-boot-apollo
server.port=8090
# apollo配置
app.id=xxx
apollo.meta=http://localhost:8080
#apollo.cluster=default
# will inject 'application' namespace in bootstrap phase
apollo.bootstrap.enabled=true
# 注入非默认application namespace或多个namespace的配置
apollo.bootstrap.namespaces=application
# put apollo initialization before logging system initialization:使Apollo的加载顺序放到日志系统加载之前
apollo.bootstrap.eagerLoad.enabled=true
logging.level.com.xxx=debug
如果配置了集群,但是没找到,会用默认集群:default的配置;没找到namespace会用默认namespace:application的配置。
配置说明:
app.id
在配置中心配置的应用身份信息。
apollo.bootstrap.enabled
在应用启动阶段是否向Spring容器注入被托管的properties文件配置信息。
apollo.bootstrap.eagerLoad.enabled
将Apollo配置加载提到初始化日志系统之前。
apollo.bootstrap.namespaces
配置的命名空间,多个逗号分隔,一个namespace相当于一个配置文件。
apollo.meta
当前环境服务配置地址,生产环境建议至少双节点,可以填写多个逗号分隔,使用一个单独的域,如 http://config.xxx.com(由nginx等软件负载平衡器支持),而不是多个IP地址,因为服务器可能会扩展或缩小。
- 基于@Value注解配置
@Component
public class ValueStyleProperty {
@Value("${apollo.value.demoKey1}")
private String demoKey1;
@Value("${apollo.value.demoKey2}")
private String demoKey2;
//省略 get/set 方法
}
参考链接
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155649.html