SpringBoot项目集成携程Apollo


参考文档:

https://www.apolloconfig.com/#/zh/README
https://zhuanlan.zhihu.com/p/28723169

Apollo简介

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

Apollo支持4个维度管理Key-Value格式的配置:

  1. application(应用)
  2. environment(环境)
  3. cluster(集群)
  4. 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项目集成:

  1. 引入依赖:
<!--Apollo的客户端-->
<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>1.7.0</version>
</dependency>
  1. 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);
    }

}
  1. 修改配置文件:
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地址,因为服务器可能会扩展或缩小。

  1. 基于@Value注解配置
@Component
public class ValueStyleProperty {

@Value("${apollo.value.demoKey1}")
private String demoKey1;


@Value("${apollo.value.demoKey2}")
private String demoKey2;
//省略 get/set 方法
}

参考链接

https://www.cnblogs.com/jvStarBlog/p/12188176.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值