Apollo公共类型的Namespace配置需要进行关联才能用吗?

简介: 其实,这个问题在强哥看来应该有稍微深入了解Apollo的使用者应该都能回答的上来。不过也是前些天,刚好看到公司新来的实习生在找Apollo配置时抓耳挠腮,了解情况之后,我发现,原来这个问题确实有许多人容易弄混。所以,强哥就在这里也简单科普一下。

其实,这个问题在强哥看来应该有稍微深入了解Apollo的使用者应该都能回答的上来。

不过也是前些天,刚好看到公司新来的实习生在找Apollo配置时抓耳挠腮,了解情况之后,我发现,原来这个问题确实有许多人容易弄混。所以,强哥就在这里也简单科普一下。


很多人会被Namespace类型弄混,主要是因为用多了:创建当前项目下的Namespace配置覆盖公共类型的Namespace配置。而慢慢的把公共类型的Namespace的具体性质给遗忘了,导致最后理解为:只要想在Apollo上自己的项目下使用公共的配置,就必须在项目下创建个相同名称的Namespace,然后关联上公共配置。如果不进行关联,项目就无法获取到公共类型的Namespace配置。


这点当然是错误的。新来的那个实习生就是因为这么理解了,导致他在Apollo上自己项目下找数据库配置信息时,一直找不到账号密码相关的配置。然后又项目代码中引用的公共Jar包源码里去找是否在代码中做了默认配置的处理。最后在代码中也没有找到,导致怀疑人生,在一旁直呼见鬼。


其实,Apollo的Namespace主要分成三种类型:私有类型、关联类型和公共类型。而在创建Namespace的时候,只要你将它配置为公共类型,那它就相当于应用到了所有的Apollo项目上,而不需要进行关联配置。


也正因如此,我们在创建公共Namespace时必须多想想,是不是说这些配置就是要应用到所有项目上。否则,如果滥用公共Namespace,也会造成很多代码发生奇奇怪怪的问题。


用一个官网的例子来解释下三种类型的关系:如下图所示,有三个应用:应用A、应用B、应用C。


应用A有两个私有类型的Namespace:application和NS-Private,以及一个关联类型的Namespace:NS-Public。


应用B有一个私有类型的Namespace:application,以及一个公共类型的Namespace:NS-Public。


应用C只有一个私有类型的Namespace:application


44.png


那么,我们分别在三个应用中获取配置时,结果如下:应用A获取Apollo配置


//application 
  Config appConfig = ConfigService.getAppConfig();
  appConfig.getProperty("k1", null); // k1 = v11
  appConfig.getProperty("k2", null); // k2 = v21
  //NS-Private
  Config privateConfig = ConfigService.getConfig("NS-Private");
  privateConfig.getProperty("k1", null); // k1 = v3
  privateConfig.getProperty("k3", null); // k3 = v4
  //NS-Public,覆盖公共类型配置的情况,k4被覆盖
  Config publicConfig = ConfigService.getConfig("NS-Public");
  publicConfig.getProperty("k4", null); // k4 = v6 cover
  publicConfig.getProperty("k6", null); // k6 = v6
  publicConfig.getProperty("k7", null); // k7 = v7


应用B获取Apollo配置


//application
  Config appConfig = ConfigService.getAppConfig();
  appConfig.getProperty("k1", null); // k1 = v12
  appConfig.getProperty("k2", null); // k2 = null
  appConfig.getProperty("k3", null); // k3 = v32
  //NS-Private,由于没有NS-Private Namespace 所以获取到default value
  Config privateConfig = ConfigService.getConfig("NS-Private");
  privateConfig.getProperty("k1", "default value"); 
  //NS-Public
  Config publicConfig = ConfigService.getConfig("NS-Public");
  publicConfig.getProperty("k4", null); // k4 = v5
  publicConfig.getProperty("k6", null); // k6 = v6
  publicConfig.getProperty("k7", null); // k7 = v7


应用C获取Apollo配置


//application
  Config appConfig = ConfigService.getAppConfig();
  appConfig.getProperty("k1", null); // k1 = v12
  appConfig.getProperty("k2", null); // k2 = null
  appConfig.getProperty("k3", null); // k3 = v33
  //NS-Private,由于没有NS-Private Namespace 所以获取到default value
  Config privateConfig = ConfigService.getConfig("NS-Private");
  privateConfig.getProperty("k1", "default value"); 
  //NS-Public,公共类型的Namespace,任何项目都可以获取到
  Config publicConfig = ConfigService.getConfig("NS-Public");
  publicConfig.getProperty("k4", null); // k4 = v5
  publicConfig.getProperty("k6", null); // k6 = v6
  publicConfig.getProperty("k7", null); // k7 = v7


好啦,相信通过这个例子,大家也就能更好地理解Apollo的Namespace三种类型的意义。


大家也要记得,在遇到不符合自己理解的知识点的问题时,最好是能够去官网等地方找找权威的解释。而不要一味的埋进自己理解有误的思维的牛角尖无法自拔。

相关文章
|
8月前
|
移动开发 API 开发者
网站集成微信登录Api接口,所踩的坑
本文总结微信登录接口开发的两大场景(微信内H5与PC端扫码)及配置要点:公众号平台配移动端二级域名(如mobile.domain.com),开放平台配PC端一级域名(如domain.com);强调redirect_uri须带http://且URL编码,避免常见报错。
991 2
|
消息中间件 存储 监控
云消息队列 RocketMQ 版(原ONS)体验
云消息队列 RocketMQ 版(原ONS)是阿里云基于 Apache RocketMQ 构建的低延迟、高并发、高可用、高可靠的分布式“消息、事件、流”统一处理平台。它在阿里集团内部业务、阿里云以及开源社区中得到广泛应用。最新的版本进一步优化了高可靠低延迟的特性,并提供了多场景容灾解决方案,使其成为金融级业务消息的首选方案。由于专业及能力问题,本次我只能从产品功能体验方面进行简单的一些分析。
2240 64
|
消息中间件 Docker 容器
使用 Docker 安装 activemq
本文是博主学习docker的记录,希望对大家有所帮助。
2322 0
使用 Docker 安装 activemq
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
2283 0
|
存储 安全 算法
EV代码签名证书获取步骤及其常见问题解答
EV代码签名证书是软件安全分发的重要工具,可验证开发者身份、确保代码完整性并消除“未知发布者”警告。获取步骤包括选择可信CA机构(如Sectigo、GlobalSign或Digicert)、提交企业信息、通过CA验证以及接收UKey。该证书支持多种文件格式,仅限企业申请,有效期1-3年,价格因机构而异。使用它可提升用户信任,满足WHQL认证需求。
|
安全 大数据 数据挖掘
课时9:阿里云Web应用防火墙:全面保障网站的安全与可用性
阿里云Web应用防火墙(WAF)基于阿里巴巴十年攻防经验,提供全面的网站安全防护。它通过Web应用防护、CC攻击防护和业务风控,有效应对各类网络威胁,确保网站的安全与可用性。智能双引擎技术降低误报率,实时数据分析和虚拟补丁更新保障系统安全。WAF已成功护航多个重大活动,为企业提供高效、简便的安全解决方案。
689 0
|
监控 Java Linux
JVM致命错误日志(hs_err_pid.log)分析
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/82880179 致命错误出现的时候,JVM 生成了 hs_err_pid.log 这样的文件,其中往往包含了虚拟机崩溃原因的重要信息。
3687 0
|
存储 Java 测试技术
迄今为止最完整的DDD实践
对于一个架构师来说,在软件开发中如何降低系统复杂度是一个永恒的挑战。
24214 8
|
移动开发 安全 前端开发
websocket最大数量的限制问题
websocket最大数量的限制问题
761 0

热门文章

最新文章