技术思绪摘录旅行
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

1. 什么是Namespace?

Namespace是配置项的集合,类似于一个配置文件的概念。

2. 什么是“application”的Namespace?

Apollo在创建项目的时候,都会默认创建一个“application”的Namespace,我们也可以自己添加不同格式的配置Namespace

3. Namespace的格式有哪些?

配置文件有多种格式,例如:properties、xml、yml、yaml、json等。同样Namespace也具有这些格式。在Portal UI中可以看到“application”的Namespace上有一个“properties”标签,表明“application”是properties格式的。

4、Namespace的获取权限分类,Namespace的获取权限分为两种:

- private (私有的)

- public (公共的)

这里的获取权限是相对于Apollo客户端来说的。

4.1 private权限

private权限的Namespace,只能被所属的应用获取到。一个应用尝试获取其它应用private的Namespace,Apollo会报“404”异常。

4.2 public权限

public权限的Namespace,能被任何应用获取。

5、项目中如何使用?

项目中会遇到很多配置,但是都是有集合概念的,比如Redis的配置,RabbitMQ的配置,数据库的配置,日志的配置,那么这些集合,就可以用Namespace来划分,如果Redis是公用的,那么这个配置就是公共配置,数据库配置是这个项目独有的,那么就是私有配置,就是这样

6、优先级

image.png

看以上的配置,我每个Namespace中,都有HOST这个配置项,而且appsettings.json文件也配置了HOST节点

那么谁的优先级高?

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, builder) =>
                {
                    LogManager.UseConsoleLogging(LogLevel.Trace);
                    builder.AddApollo(builder.Build().GetSection("Apollo"))
                        .AddDefault()
                        .AddNamespace("TEST1.RabbitMQ")
                        .AddNamespace("TEST1.redis")
                        .AddNamespace("MPHIS",ConfigFileFormat.Json);
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

以上代码中,注入的先后顺序,那么优先级如下:

appsettings.json < application < TEST1.RebbitMQ < TEST1.redis < MPHIS

所以最后获取到的配置是MPHIS里面的。

CarsonIT 微信扫码关注公众号 策略、创意、技术

留下您的脚步

 

最近评论

查看更多>>

精选推荐

阅读排行

友情打赏

请打开您的微信,扫一扫