梁旭你该知道的本文转载请联系Java极客技术公众号。大家好,我是阿粉,今天给大家分享的是Nacos,微服务环境下必备的强大组件。自从使用了Nacos,阿芬的服务再也不用担心服务注册发现和配置管理混乱的问题了。背景Nacos致力于帮助开发者发现、配置和管理微服务。Nacos提供了一套简单易用的特性,可以快速实现动态的服务发现、服务配置、服务元数据和流量管理。目前主流的互联网服务都是基于微服务架构的,所以服务之间的交互是必不可少的,而且每个服务的上线和下线都是相互独立的,服务的配置信息也会动态调整。这就要求我们的服务更加灵活。Nacos的出现就是为了帮助我们实现这些繁琐的功能。Nacos的详细介绍和部署请参考官网Nacos.io。这里只介绍如何快速接入SpringBoot项目以及在接入和使用过程中可能遇到的坑。访问和添加依赖第一步是在pom配置文件中添加如下依赖,实现服务注册发现和配置中心功能。com.alibaba.cloudspring-cloud-starter-alibaba-nacos-configcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery添加配置1.第二个第一步,在SpringBoot项目的启动类中添加如下注解@EnableDiscoveryClient,启动服务注册发现功能。2.添加配置文件,需要修改相应的配置信息以适合自己。为了便于管理,需要合理设置应用组名、命名空间和相关配置。当多个业务使用同一个nacos集群时,需要根据每个业务设置自己的命名空间。所有的配置文件都需要设置在对应的命名空间下,避免混用多个业务。此外,业务需要根据使用的组件或配置设置独立的配置文件,如数据库配置、Redis配置等。设置为同一个应用的其他服务也可以使用,当有地址变化时,只能修改一个文件,不会忘记。#应用服务名spring.application.name=application-name#应用组名spring.cloud.nacos.config.group=GROUP-NAME#配置文件后缀名spring.cloud.nacos.config.file-extension=properties#后台创建命名空间后,会自动生成nacos对应的命名空间。spring.cloud.nacos.config.namespace=xxxxxxxxxxxxxxxxxxxxxxxx#对应配置文件#MySQL相关配置.data-id=mysql.propertiesspring.cloud.nacos.config.ext-config[0].group=GROUP-NAME#Redis相关配置spring.cloud.nacos.config.ext-config[1].data-id=redis.propertiesspring.cloud.nacos.config.ext-config[1].group=GROUP-NAME#其他配置如spring.cloud.nacos.config.ext-config[2].data-id=other.propertiesspring.cloud.nacos.config.ext-config[2].group=GROUP-NAME#配置中心地址,多个逗号分隔spring.cloud.nacos.config.server-addr=xxx.xx.xx.xx:xxxx#服务注册Discovery地址,多个逗号分隔spring.cloud.nacos.discovery.server-addr=xxx.xx.xx.xx:xxxx#集群名称spring.cloud.nacos.discovery.cluster-name=CLUSTER-NAME3。代码可以使用注解@Value()直接读取Nacos配置中的属性参数,或者使用@ConfigurationProperties(prefix="spring.datasource")批量读取数量参数4.spring.cloud.nacos.config.ext-config[0].refresh=true该参数表示是否开启自动更新,根据是否需要自动更新,是否配置,如果需要自动更新,添加此配置后需要在需要自动更新配置的Bean上添加@RefreshScop注解。然后相应Bean里面的属性就可以自动更新了。添加spring.cloud.nacos.config.ext-config[0].refresh=true配置后,在Nacos中修改配置后,日志中会出现如下信息,重新加载配置,更改的关键信息被输出。5.服务调用所有服务都连接到Nacos后,我们可以在Nacos后台看到各个服务的状态,如下图,可以看到服务状态。那么,如果我们要在服务A中调用服务B,可以直接在FeginClient中配置服务B的名称,无需填写URL。这样我们就不用考虑服务B的地址和端口是否会发生变化。服务B的实例增减,端口有没有变化,对服务A来说都无所谓,只要有服务名即可。Nacos默认有一个名为public的命名空间,不能删除,所有没有指定命名空间的配置都会放在这个命名空间下;同样Nacos有一个默认命名空间,名为DEFAULT_GROUP组,当没有指定组名时,默认配置在这个组下。对于我们的应用来说,由于一个Nacos集群在很多情况下是多个团队共同使用的,为了方便管理,我们需要根据自己的业务设置自己的namespace来存放这个业务的配置文件。该命名空间下的配置文件需要根据各个模块重新分组。要知道在没有明确命名空间划分的情况下修改一个配置的内容是非常不爽的。在线配置调整,不小心出事就是意外。如果配置仍然自动更新,就没有后悔的机会。精细配置配置文件要具体,一个配置文件设置一个内容。比如MySQL的数据源是单独配置的,Redis的数据源是单独配置的。如果有多个Redis服务,根据功能建议分别配置,因为不是所有的Service都需要为每个Redis配置一个链接。各个服务可以根据需要单独引用相应的配置文件。将所有的配置单独放在一个配置文件中,方便后续修改配置。你只需要修改一个配置文件,其他没有修改的地方就不用担心了。合理规划配置文件的内容,往往能起到事半功倍的效果,大大节省时间,降低出错概率。自动刷新上一节介绍了如何配置自动刷新,但是服务是否需要自动更新配置取决于自身业务。我这里一般不建议设置自动更新,因为现在部署微服务,有时候我们上线一个新功能,灰度发布。如果配置了自动更新,调整了配置,所有实例都会生效,所以会有风险。如果不设置自动更新,我们可以单独重启个别实例,观察线上情况,待稳定后再释放所有服务,这样会安全很多。当然对于没有那么多服务的场景,不需要灰度,影响也不大,配置自动更新会方便很多,修改配置后不需要重启服务。综上所述,Nacosasaservice的注册发现和配置的统一管理,确实非常优秀。除了可以快速接入SpringBoot项目外,其他框架也可以快速接入。更多使用请参考官网。最后希望大家可以解放双手,快速接入游戏!写在最后,最后邀请你加入我们的知识星球。这里有1800+优秀的人与你共同进步。如果您是新手,您将获得稳定的利润。行业经验和干货分享给你;如果你是大哥,你可以进来,我们可以一起交流和分享你的经验。也许以后我们可以合作,给你的生活多一种可能。