Nacos是SpringCloudAlibaba的重要组成部分,它提供了两个重要的功能:服务注册与发现和统一配置中心功能。服务注册与发现功能解决了微服务集群中调用者与服务提供者的连接管理和请求转发等功能,让程序的开发者无需过多关注服务提供者和服务提供者的稳定性和健康性调用地址,因为这些可以依赖Nacos进行监控、管理和自动转发。试想,当一个系统被多次部署时,如何确定调用哪个(服务)实例?当调用的实例出现问题时,如何将请求转发给其他实例?这些问题都是微服务架构中的现实问题,但是使用Nacos可以轻松解决这些问题。并且Nacos还提供了统一的配置中心,解决了项目配置文件存放在本地或者github上的安全问题,支持配置文件的动态修改和统一维护。一、Nacos简介Nacos是DynamicNamingandConfigurationService的缩写;它是一个动态服务发现、配置管理和服务管理的平台,更容易构建云原生应用程序。官网:https://nacos.io/仓库源码:https://github.com/alibaba/nacos2.Nacos生态Nacos支持几乎所有主流语言,其中Java/Golang/Python已经支持Nacos2.0长链接协议,这样可以最大限度地发挥Nacos的性能。阿里微服务DNS(Dubbo+Nacos+Spring-cloud-alibaba/Seata/Sentinel)最佳实践是Java微服务生态的最佳解决方案。3、Nacos快速部署Nacos支持3种部署模式:单机部署集群部署多集群部署Nacos安装方法如下:使用源码安装。使用编译好的安装包进行安装。在本文中,我们将使用第一种方式添加Docker来快速部署Nacos服务器。由于Docker的安装和卸载都比较方便,本文采用这种方式来演示Nacos的安装。其他安装方法见官网:https://nacos.io/zh-cn/docs/q...3.1准备环境准备Nacos依赖Java环境运行。如果通过代码构建运行Nacos,还需要为此配置Maven环境。请确保在以下版本环境下安装使用:64位操作系统,支持Linux/Unix/Mac/Windows,推荐使用Linux/Unix/Mac。64位JDK1.8+。Maven3.2.x+。由于本文采用Nacos+Docker的方式进行部署,没有安装Docker的同学可以自行搜索安装。安装OpenJDK8yum-yinstalljava-1.8.0-openjdk-devel.x86_64安装完成后使用java-version查看是否安装成功,如下图:如果显示具体的Java版本,说明安装是成功的。3.2下载Nacos本文使用git下载Nacos源码包,所以需要先使用如下命令安装git:yum-yinstallgit下载Nacos源码:gitclonehttps://github.com/nacos-group/nacos-docker.git下载完成如下图:进入Nacos目录:cdnacos-docker3.3启动Nacos服务Nacos运行需要一个数据库,支持两个数据库:本地数据库Derby,和MySQL数据库。所以对应的启动命令如下:Derby数据库单机运行:docker-compose-fexample/standalone-derby.yamlupMySQL5.7数据库单机运行:docker-compose-fexample/standalone-mysql-5.7.yamlupMySQL8数据库单机运行:docker-compose-fexample/standalone-mysql-8.yamlup集群模式启动:docker-compose-fexample/cluster-hostname.yamlup启动成功,如下图:3.3访问Nacos启动成功后,可以通过http://127.0.0.1:8848/nacos/#...访问Nacos的管理控制台,如下图:在nacos中输入用户名和密码进入系统,如下图显示:3.4常见报错问题3.4.1docker-composecommandnotfounddocker-compose是一个定义和运行多容器Docker的编排工具应用程序。使用docker-compose后,不再需要一个一个创建和启动容器。您可以使用一个YML文件来配置您的应用程序需要的所有服务,然后使用单个命令从YML文件配置中创建和启动所有服务。但是docker-compose需要单独安装,否则会出现如下错误:解决办法:cd/usr/local/binwgethttps://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-Linux-x86_64renamedocker-compose-Linux-x86_64docker-composedocker-compose-Linux-x86_64chmod+x/usr/local/bin/docker-composeddocker-composeversion安装成功如下图:3.4.2image:invalidreferenceformat使用docker-compose可能会提示“ERROR:nosuchimage:nacos/nacos-server::invalidreferenceformat”,参数格式无效,如下图:解决方法:修改example/standalone-mysqlNacos源码中-5.7.yaml的配置项,将"image:nacos/nacos-server:{{NACOS_VERSION}}"修改为:"image:nacos/nacos-server:latest"。4、SpringCloudAlibaba服务注册服务注册者也就是生产者,也就是微服务中的服务提供者。它是基于SpringBoot项目创建的。具体操作步骤如下:创建一个项目,使用阿里云地址http://start.aliyun.com创建一个SpringCloudAlibabaNacos项目。点击Next,如下图:添加对NacosServiceDiscovery框架的支持,如下图:添加对SpringWeb(SpringMVC)框架的支持,最后点击Finish,完成项目创建。4.1项目依赖SpringCloudAlibabaNacos项目主要有两个依赖,如下图:/dependency>com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery4.2在配置文件application中修改配置文件.properties填写Nacos的相关信息,具体内容如下:#应用名称(也是Nacos中的服务名称)spring.application.name=spring-cloud-nacos-producer#应用服务WEB访问端口服务器。port=8082#Nacos认证信息spring.cloud.nacos.discovery.username=nacosspring.cloud.nacos.discovery.password=nacos#Nacos服务发现和注册配置,其中子属性server-addr指定Nacos服务器主机和端口spring.cloud.nacos.discovery。server-addr=mse-6d50f4f0-p.nacos-ans.mse.aliyuncs.com:8848#注册到nacos的指定命名空间,默认是publicspring.cloud.nacos.discovery.namespace=public4.3添加代码接下来添加aRestfulAPI的接口,供后续服务调用者使用。具体实现代码如下:importorg.springframework.boot.SpringAppli阳离子;导入org.springframework.boot.autoconfigure.SpringBootApplication;导入org.springframework.cloud.client.discovery.EnableDiscoveryClient;导入org.springframework.web.bind.annotation.PathVariable;导入org.springframework.web.bind.annotation。}("/sayhi/{name}")publicStringsayHi(@PathVariableStringname){return"HiNacosDiscovery"+name;}}写好代码后,运行项目,观察Nacos中的服务列表可以看到这个项目,如下图:经过以上操作,我们创建的SpringCloudAlibaba项目就注册到了Nacos中,其他程序就可以了也可以通过Nacos调用。5.SpringCloudAlibaba服务发现和上面的创建方法类似,接下来我们创建一个服务调用者,也叫消费者,用来调用上面框架中的sayhi方法。具体操作步骤如下。5.1创建项目5.2修改配置文件#应用名称spring.application.name=springcloud-nacos-consumer#应用服务WEB访问端口server.port=8082#Nacos帮助文档:https://nacos.io/zh-cn/docs/concepts.html#Nacos认证信息spring.cloud.nacos.discovery.username=nacosspring.cloud.nacos.discovery.password=nacos#Nacos服务发现和注册配置,其中子属性server-addr指定Nacos服务器主机andportspring.cloud.nacos.discovery.server-addr=82.157.146.10:8848#注册到nacos的指定命名空间,默认是publicspring.cloud.nacos.discovery.namespace=public5.3添加代码实现代码consumer有两个类,在启动类中添加一个RestTemplateBean对象,提供RestfulAPI请求。启动类的具体实现代码如下:cloud.client.loadbalancer.LoadBalanced;导入org.springframework.context.annotation.Bean;导入org.springframework.web.client.RestTemplate;@SpringBootApplication@CEnliableDisc类SpringcloudNacosConsumerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringcloudNacosConsumerApplication.class,args);}@LoadBalanced@BeanpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}消费者的具体实现代码如下:importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation。RestController;importorg.springframework.web.client.RestTemplate;@RestControllerpublicclassTestController{@AutowiredprivateRestTemplaterestTemplate;@RequestMapping("/hi")publicStringhi(Stringname){//调用生产者sayhi方法并返回结果returnrestTemplate.getForObject("http://spring-cloud-nacos-producer/sayhi/"+name,字符串类);}}添加完代码后,运行程序,在Nacos服务列表中可以看到如下内容:之后,访问消费者的hi方法,让它调用生产者的实现效果如下:以上结果,可以看出消费者通过Nacos成功调用了spring-cloud-nacos-producer中的生产者sayhi方法总结Nacos提供了两个重要的功能:服务注册和发现以及统一配置中心的功能。提供单机部署、集群部署和多集群部署三种部署方式,以及源码安装和安装包两种安装方式。我们使用Docker加Nacos源码来安装部署Nacos。Nacos服务注册和发现都需要添加Nacos服务发现框架的支持,并在配置文件中配置相应的Nacos信息,才能正确实现服务注册和发现功能。Reference&Acknowledgments《Nacos框架与原理》判断是非在自己,听别人说,得失看数字。公众号:Java中文社区Java访谈合集:gitee.com/mydb/interview