SpringCloudAlibaba是阿里巴巴提供的一站式微服务开发解决方案,已被SpringCloud正式收录。Nacos作为SpringCloudAlibaba的核心组件之一,提供了两个非常重要的功能:注册中心和配置中心。让我们今天了解并实施两者。一、Nacos简介Nacos致力于帮助开发者发现、配置和管理微服务。它提供了一组易于使用的功能集,帮助开发者快速实现动态服务发现、服务配置、服务元数据和流量管理。Nacos特性介绍Nacos具有以下特性:服务发现和服务健康监控:支持基于DNS和RPC的服务发现,支持对服务进行实时健康检查,防止向不健康的主机或服务实例发送请求。动态配置服务:动态配置服务让您可以集中、外部、动态地管理所有环境的应用配置和服务配置。动态DNS服务:动态DNS服务支持加权路由,让您更容易实现数据中心内网的中间层负载均衡、更灵活的路由策略、流量控制和简单的DNS解析服务。服务及其元数据管理:支持从微服务平台建设的角度对数据中心所有服务及其元数据进行管理。2.注册中心实现注册中心有两个重要的功能:服务注册和服务发现,解决了微服务集群中调用者和服务提供者连接管理和请求转发的功能,让程序的开发者不需要太多关注服务提供者和调用地址的稳定性和健康性,因为这些都可以被Nacos监控、管理和自动转发。注册中心有两个角色:一个是服务提供者Provider,一个是服务调用者Consumer。接下来,我们将分别创建这两个角色。2.1创建服务提供者2.1.1新建项目并添加依赖新建一个SpringBoot项目,使用阿里云地址http://start.aliyun.com创建一个SpringCloudAlibabaNacos项目,如下图:单击下一步继续。如下图:添加NacosServiceDiscovery框架支持,如下图:对应的依赖框架如下:org.springframework.bootspring-boot-starter-webcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryPS:添加SpringWeb(SpringMVC)框架主要是为了方便后期测试。2.1.2配置Nacos连接信息在配置文件application.properties中,需要填写Nacos的相关连接信息,具体信息如下:#应用名(也是Nacos中的服务名)spring.application.name=spring-cloud-nacos-producer#应用服务WEB访问端口server.port=8082#Nacos认证信息spring.cloud.nacos.discovery.username=nacosspring.cloud.nacos.discovery.password=nacos#Nacos服务发现与注册配置,其中子属性server-addr指定Nacos服务器主机和端口spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848#注册到nacos的指定命名空间,默认是publicspring。cloud.nacos.discovery.namespace=public2.1.3添加服务提供者方法新建一个控制器Controller,添加sayhi方法,可以使用HTTP协议访问。是提供给后续服务消费者的一种调用方式。具体实现如下:.PathVariable;导入org.springframework.web.bind.annotation.RequestMapping;导入org.springframework.web.bind.annotation.RestController;@SpringBootApplication@RestControllerpublicclassSpringCloudNacosProducerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringCloudNacosProducerApplication.class,args);}@RequestMapping("/sayhi/{name}")publicStringsayHi(@PathVariableStringname){return"HiNacosDiscovery"+name;}}写完代码,运行项目,就可以在Nacos的服务列表中看到了,如下图:经过上面的步骤,我们的服务提供者就创建好了,接下来我们创建一个服务消费者Consumer2.2创建服务消费者2.2.1新建项目并添加依赖。这一步和上面的服务提供者类似,同样添加了nacosdiscovery和web依赖。具体实现如下:2.2.2配置Nacos连接信息#应用名称spring.application.name=springcloud-nacos-consumer#应用服务WEB访问端口server.port=8082#Nacos认证信息spring.cloud.nacos.discovery.username=nacosspring.cloud.nacos.discovery.password=nacos#Nacos服务发现和注册配置,子属性server-addr指定Nacos服务器主机和端口spring.cloud.nacos.discovery.server-addr=127.0。0.1:8848#注册到nacos的指定命名空间,默认是publicspring.cloud.nacos.discovery.namespace=public2.2.3添加服务调用代码服务消费者的实现有两个关键点。首先,创建一个新的RestTemplate对象。该对象是Spring框架提供的用于发出HTTP请求的类。实现代码如下:importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;importorg.springframework.cloud.client.loadbalancer.LoadBalanced;导入org.springframework.context.annotation.Bean;导入org.springframework.web.client.RestTemplate;@SpringBootApplication@EnableDiscoveryClientpublicclassSpringcloudNacosConsumerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringcloudNacosConsumerApplication.class,args);}@LoadBalanced@BeanpublicRestTemplaterestTemplate(){//用于发出HTTP请求的对象returnnewRestTemplate();二、新建controller,注入RestTemplate对象,调用Nacos中的服务提供者接口,实现代码如下:importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web。bind.annotation.RequestMapping;导入org.springframework.web.bind.annotation.RestController;导入org.springframework.web.client.RestTemplate;@RestControllerpublicclassTestController{@AutowiredprivateRestTemplaterestTemplate;@RequestMapping("/hi")publicStringhi(Stringname){//调用生产者sayhi方法并返回结果returnrestTemplate.getForObject("http://spring-cloud-nacos-producer/sayhi/"+name,字符串类);}}其中spring-cloud-nacos-producer是服务服务提供者的ID,sayhi是服务提供者提供的接口地址通过上面的配置,我们的服务消费者也创建好了,启动项目,执行结果如下图所示:从上面的结果来看,可以看出服务消费者已经通过Nacos成功调用了服务提供者,这是Nacos中注册中心的基本使用。3、配置中心实现配置中心的功能是将本地的配置文件传输到云端。所谓云,也就是Nacos的服务器端。这样既可以保证配置文件中的敏感数据不被泄露,又可以提供实时的修改和查看。、回滚和动态刷新配置文件,非常实用。但是需要注意的是,配置中心和注册中心的依赖包是不一样的。注册中心的依赖包是nacosdiscovery,配置中心的依赖包是nacosconfig。详情如下。3.1新建项目并添加依赖创建SpringBoot项目,添加nacosconfig和web依赖包,如下图:PS:添加web依赖主要是为了后期测试方便。对应的配置依赖信息如下:阿里巴巴。cloudspring-cloud-starter-alibaba-nacos-config3.2配置NacosConfig信息在应用的/src/main/resources/目录下创建bootstrap配置文件.yml(或bootstrap.properties),添加如下NacosConfig配置:spring:application:name:nacosconfig#项目名匹配nacosDataIdcloud:nacos:config:server-addr:127.0.0.1:8848#nacos地址和端口文件-extension:yaml#获取配置文件的格式:yamlusername:nacos#nacos认证用户名password:nacos#nacos认证服务器:port:9001#项目启动端口3.3编写代码读取配置文件新建controller,使用@Value注解读取配置信息,实现代码如下:importorg.springframework.beans.factory.annotation.Value;导入org.springframework.web.bind.annotation.GetMapping;导入org.springframework.web.bind.annotation.RestController;@RestControllerpublicclassTestController{//从nacos读取配置项config.info@Value("${config.info}")privateStringconfigInfo;@GetMapping("/getconfig")publicStringgetConfigInfo(){返回配置信息;}}3.4Nacos控制台添加配置信息在Nacos控制台创建并设置配置文件,执行步骤如下首先在配置列表中点击“添加”按钮,如下图:进入配置页面,新建一个YAML或者Properties配置文件,如下图所示:上面关键参数的含义和规则解释如下。3.4.1DataIDDataID的拼接格式如下:${prefix}-${spring.profiles.active}.${file-extension}其中prefix默认为spring.application.name的值,可以也可以通过配置项spring进行配置。cloud.nacos.config.prefix进行配置。spring.profiles.active是当前环境对应的profile。当activeprofile为空时,对应的connector-将不存在,dataId的拼接格式变为${prefix}.${file-extension}file-extension来配置内容的数据格式,可以通过配置配置项spring.cloud.nacos.config.file-extension。目前仅支持属性类型。3.4.2GroupGroup分组选项主要用于隔离不同的配置项。它的默认值为DEFAULT_GROUP,可以通过spring.cloud.nacos.config.group进行配置。配置好相应的内容后,点击下方的“发布”按钮。添加成功后,会自动返回配置列表,如下图:经过以上步骤,Nacos配置中心的功能就完成了。接下来启动项目和程序执行结果如下图所示:3.5动态刷新功能动态刷新功能是指在Nacos配置中心修改配置文件,无需重启即可实时读取最新配置该项目。默认情况下,Nacos会为所有成功获取数据的Nacos配置项添加监控功能。当它检测到服务器配置发生变化时,会实时触发org.springframework.cloud.context.refresh.ContextRefresher的refresh方法。但是如果需要动态刷新bean,需要参考Spring和SpringCloud的规范。建议在类上添加@RefreshScope或@ConfigurationProperties注解,实现配置中心的动态刷新功能。4、项目源码https://gitee.com/mydb/spring-cloud-alibaba-exampleSummaryNacos作为SpringCloudAlibaba的核心组件之一,提供了两个非常重要的功能:注册中心和配置中心。注册中心有两个重要的功能:服务注册和服务发现。解决了微服务集群中调用者与服务提供者的连接管理和请求转发等功能,保证服务调用者可以稳定调用健康的服务。注册中心的本质是将项目中的本地配置文件云化,解决了配置文件的安全性和统一性问题,并提供了配置文件历史版本回滚和配置文件动态刷新的功能.参考文档Nacos官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html