分布式配置中心-携程Apollo实践

508 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

1、项目初始化

创建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

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

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