ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-02-16 10:34:25  阅读:382  来源: 互联网

标签:Apollo getProperty NS Namespace 关联 null publicConfig


点击关注强哥,查看更多精彩文章呀
其实,这个问题在强哥看来应该有稍微深入了解Apollo的使用者应该都能回答的上来。

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

很多人会被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

那么,我们分别在三个应用中获取配置时,结果如下:
应用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三种类型的意义。

大家也要记得,在遇到不符合自己理解的知识点的问题时,最好是能够去官网等地方找找权威的解释。而不要一味的埋进自己理解有误的思维的牛角尖无法自拔。
点击关注强哥,查看更多精彩文章呀

标签:Apollo,getProperty,NS,Namespace,关联,null,publicConfig
来源: https://www.cnblogs.com/breakingdawn/p/15899331.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有