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

点击关注强哥,查看更多精彩文章呀

其实,这个问题在强哥看来应该有稍微深入了解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三种类型的意义。

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值