携程分布式配置框架Apollo实践

1、Apollo介绍

Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务项目配置管理场景。

2、使用目的

1、安全。如果配置在本地项目中,开发人员可以看到测试环境甚至是生产环境的各种地址、账号、密码等等,特别是支付宝/微信等平台支付/退款密匙,这是非常不安全的;
2、配置热更新。用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序。不需要再重启程序,配置才能进行更新。
3、配置的版本发布。改动版本有版本的控制,可以快速回滚/查看历史配置。
4、灰度发布。支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例
5、统一化配置管理,开发人员只需要维护自己的配置文件,公共的配置文件不需要改动。避免开发人员改错某项配置后提交上去,导致不必要的问题发生。

3、项目初始化

创建Springboot项目,添加项目依赖

        <!-- https://mvnrepository.com/artifact/com.ctrip.framework.apollo/apollo-client -->
        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>1.9.2</version>
        </dependency>

修改application.properties配置文件,如下

app.id=apollo-test
# apollo的configServer地址
apollo.meta=http://192.168.80.243:8080
# apollo的configServer地址
apollo.config-service= http://192.168.80.243:8080
apollo.bootstrap.enabled=true
apollo.bootstrap.eagerLoad.enabled=true

2、测试使用

2.1 界面说明

创建项目,项目的AppId要和配置文件application.properties一致

image-20220113084717425

表格:以表格的形式显示所有配置,通常使用它来修改单一配置

文本:以文本框的形式显示所有配置,通常使用它来批量增加配置

更改历史:显示历史的修改情况

实例列表:显示使用这些配置的所有实例

2.2 配置迁移

点击文本,右边按钮变动。点击修改配置按钮,可以在里面添加配置,注意:需要是**properties**格式的。如果之前有项目可以直接把之前的项目配置复制里面去。

添加完成配置后,点击右上角的提交修改。修改完成后需要点击上面的发布程序才能识别到。

image-20220113090916832

server.port=8081
spring.application.name=apollo-test
logging.file.path=D:\\Downloads\\apollo-use-cases-master\\apollo-test
apollo.value=11

点击发布,apollo上面的配置就算完成了

启动项目,会发现项目正常启动,修改端口号或者路径配置,重启项目也会发现配置会生效

2.3 热更新

在项目中添加类,来获取配置中的值

/**
 * @Description:
 * @author: zhuiFeng
 * @date: 2022年01月12日 14:55
 */
@RestController
public class Controller {
    @Value("${apollo.value}")
    private String apolloValue;
    @RequestMapping("")
    public String test(){
        return "获取到apollo.value的值为:"+apolloValue;
    }
}

重启项目,请求接口http://localhost:8081/,返回的结果是:

获取到apollo.value的值为::11

修改apollo中配置中 apollo.value的值为 我爱北京天安门,点击发布后,调用接口返回的结果是:

获取到apollo.value的值为:我爱北京天安门

2.4 命名空间

有时侯项目的配置太多,在一个文件里不太容易维护。有时候这些配置可能和其他项目有些公共的地方,维护起来不太方便,我们可以使用命名空间来解决这些问题

命名空间:可以创建公有的一些配置,也可以创建私有的个性化的配置,支持ymlproperties,txtxmljson等格式

2.4.1 创建

进入项目界面,点击右下角的添加Namespace,进入添加NameSpace界面后,选择创建NameSpace

image-20220113094438086

创建一个名为 common1,格式为yml文件,类型为public,如下

image-20220113100040496

点击提交后,返回项目界面,就会出现项目中

2.4.2 测试使用

编辑公共配置common1,添加如下配置,添加完成后进行发布

apollo:
  value1: 编码中。。

在项目中添加接口

    @Value("${apollo.value1}")
    private String apolloValue1;

    @RequestMapping("/getConfig1")
    public String getConfig(){
        return "获取到apollo.value1的值为:"+apolloValue1;
    }

修改项目中的application.properties配置文件,添加配置。

注意:非properties配置文件需要带上后缀名,公共的配置需要加上部门前缀,我们的部门为 TEST1,所以文件名为 TEST1.common1.yml

apollo.bootstrap.namespaces=application,TEST1.common1.yml

重启项目,调用接口http://localhost:8081/getConfig1,获取到了 apollo.value1的值

获取到apollo.value1的值为:编码中。。

2.4.3 优先级关系

修改application的配置以及公共配置common1,添加apollo.valueapollo.value1的配置,点击发布

image-20220113134606036

发现输出的都是apollo里application的内容。

修改项目中的配置application.properties文件内容,把公共配置提前,重启项目

# 之前
apollo.bootstrap.namespaces=application,TEST1.common1.yml
# 之后
apollo.bootstrap.namespaces=TEST1.common1.yml,application

调用接口发现,结果是通用配置中的内容

结论:配置的覆盖是由先后顺序造成的,可以根据先后顺序个性化调整配置内容。两个配置文件中的内容如果有重复的,位置在前的配置文件内容会覆盖后面配置文件里重复的内容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是刘奇奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值