背景:通过nacos多人协同本地开发时,服务的调用到本地,而不会调用到服务器。配置的继承和隔离。
Naocs配置和开发使用技巧
- Nacos作为配置管理和服务调用中心,集中管理配置,方便各个服务调用和发现。
- Bootstrap.yml是Springboot项目引入nacos配置的核心文件。本文以nacos1.4.2为例子。
现在对bootstrap.yml配置进行说明,以及日常配置和服务调用服务使用说明。
Nacos中分为三层隔离,分别是命名空间(namespace)隔离、组(group)隔离、集群(cluster-name)隔离。命名空间是绝对隔离,配置和服务都不可调用。组隔离是同一命名空间下,不同组配置可以共享和继承,但是服务不能跨组调用。而集群隔离,是可以让同一命名空间,同一个分组下,同一集群内服务隔离或不隔离。
这里重点说明一下集群隔离,该方面资料网上较少。
集群隔离,主要解决的痛点是:
用nacos多人协同开发几个相同的微服务模块时,每个开发人员希望自己本地启动的微服务,会调用到自己本地的另外一个微服务。而公共的微服务还是调用远程的服务器上的微服务。
举个例子,现在有四个微服务,a1,a2,b1,b2,b3。测试环境服务器自动构建了四个微服务,并且正常运行。现在开发人员A和开发人员B,都在本地需要调试开发a1和a2服务,而a1,a2必须依赖b1,b2,b3服务才能启动,并且a1和a2服务需要通过nacos的服务名相互调用本地的a1和a2。
- 如果不做处理,开发人员A,B都会在nacos上注册a1,a2,加上服务器注册的。会有三个服务实例,本地a1调用a2时,会调用到服务器或者其他人的a2,不适合本地调试。
- 如果修改bootstrap.yml中的namespace的话,需要每个开发人员建立一个命名空间,并且需要每个命名空间都要再运行不用开发的b1,b2,b3等基础服务。
- 或者本地开发人员临时修改需要彼此调用的服务的服务名,但是要对应修改feign中的调用的服务编码,有的feign是打包成sdk工具依赖,不便修改。
办法如下:
通过引入如下两个配置:
spring.cloud.nacos.discovery. cluster-name=zzc #指定服务集群
Bservice.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule
#Bservice是要去调用的服务名,
Nacos使用过程中配置部分说明:
继承的扩展配置组是DEFAULT_GROUP,而当前项目配置config所在的组是DEFAULT_GROUP_zzc。因此启动项目时,会去获取DEFAULT_GROUP组下,配置文件名为继承的扩展配置文件名的配置(xxx-base-config.yml),再去获取DEFAULT_GROUP_zzc组下,配置文件名为(服务名.yml)的配置文件。最后再加上本地配置文件为最终的配置文件。优先级时,远程覆盖本地的,自己组的配置覆盖继承组的配置。
而且注意:DEFAULT_GROUP_zzc组配置必须在extension-configs[0]的下面,否则。继承组DEFAULT_GROUP会被覆盖掉。extension-configs[n],其中n代表优先级,n越大,优先级越高。
多网卡情况下,注册到nacos上的ip可能不是正确的Ip,需要在discovery中指定注册的IP
Discovery.group可以和config.group不是同一个组。这样的好处就是配置和服务的单独隔离
Bootstrap.yml配置的优先级高于本地的application.yml配置。所以在有需要指定profile.active=dev时,必须引入bootstrap.yml。如下:
Bootstrap.yml 基础公共配置,必须存在,用于指定profile.active
Bootstrap-dev.yml 本地开发用
Bootstrap-prod.yml 生产环境用
Bootstrap-test.yml 测试环境自动构建用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)