作者|雷哥来源|Java中文社区(ID:javacn666)转载请联系授权(微信ID:GG_Stone)SpringCloudAlibaba技术体系中的Nacos提供了两个重要的功能:注册中心(服务注册和发现)功能和配置中心功能。其中,注册中心解决了微服务调用中服务提供者和服务调用者的解耦,使得程序开发者无需过多关注服务提供者和调用者的操作细节,只需要通过Nacos注册中心实现两者的互联互通,相当于实现了远程服务的本地化,提供了健康检查等机制。Nacos注册中心提供了两种服务注册和发现的方式:OpenAPI方式和(Nacos)SDK方式。所谓OpenAPI是指通过Nacos提供的开放API地址来注册和发现服务;SDK方式是使用Nacos提供的SDK框架,即使用spring-cloud-starter-alibaba-nacos-discovery框架实现服务注册和发现。发现的特征。一、服务注册1.1服务注册:OpenAPI模式OpenAPI的使用比较简单。首先打开系统命令行,在系统命令行中使用如下命令实现服务注册:curl-XPOST'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=spring-cloud-nacos-producer&ip=192.168.76.224&port=8081'以上命令的执行结果如下图所示:当“ok”的结果返回,表示服务注册成功,其中:serviceName:表示服务名称。ip:表示客户端程序的IP地址。port:表示客户端程序的端口号。同时我们也可以通过打开Nacos管理后台看到我们注册的服务,如下图:点击服务详情,可以看到我们注册的IP地址和端口,如下图:1.2服务注册:SDK方式SDK方式需要先创建一个SpringCloud项目。项目创建方法请参考:https://mp.weixin.qq.com/s/c4EHDWAlTXKr3Xl17biglA。项目创建成功后,添加NacosSDK框架支持,最后配置Nacos的相关信息,具体实现如下。1.2.1添加SDK在pom.xml中添加NacosSDK框架支持,具体配置如下:com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery1.2.2Nacos配置添加SDK框架后,需要在项目的配置文件中添加相应的配置。具体配置内容如下:#应用名称spring.application.name=spring-cloud-nacos-producer#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=public设置完以上配置后,启动当前项目,程序会自动注册到Nacos服务器。2、在Nacos中正确注册服务发现服务后,可以通过服务发现正常调用服务提供者暴露的方法。仍然有以下两种实现方式。2.1服务发现:在OpenAPI模式下,在系统命令行中使用如下命令实现服务发现:curl-XGET'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'执行结果如下:以上内容经过JSON格式化后的信息如下:{"name":"DEFAULT_GROUP@@spring-cloud-nacos-producer","groupName":"DEFAULT_GROUP","clusters":"","cacheMillis":10000,"hosts":[{"instanceId":"192.168.76.224#8081#DEFAULT#DEFAULT_GROUP@@spring-cloud-nacos-producer","ip":"192.168.76.224","port":8081,"weight":1,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@spring-cloud-nacos-producer","metadata":{"preserved.register.source":"SPRING_CLOUD"},"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000,"ipDeleteTimeout":30000}],"lastRefTime“:1644210068852,“校验和”:“”,“allIPs”:假,“reachProtectionThreshold”:false,"valid":true}其中:健康:是否开启健康检测功能,即定期向Nacos服务端上报自己的健康状态ephemeral:是否为临时实例。临时实例下线一段时间后,会被Nacos直接移除。""instanceHeartBeatInterval":5000":表示每5s进行一次健康检查。""instanceHeartBeatTimeOut":15000":表示如果超过15s没有收到(客户端)心跳包,实例将被设置为不健康状态。""ipDeleteTimeout":30000":表示如果超过30s没有收到心跳包,则删除临时实例。2.2服务发现:SDK方式类似于SDK实现服务注册的步骤。服务发现也需要先创建一个SpringCloud项目,然后添加NacosSDK框架,再配置Nacos相关信息,最后写代码调用服务商提供的方法。2.2.1添加SDK在项目的pom.xml文件中,添加NacosSDK框架支持,具体内容如下:com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery2.2.2配置Nacos在项目配置文件中添加如下Nacos相关配置:#应用名spring.application.name=springcloud-nacos-consumer#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对象在项目中实现通过调用se公开的方法服务提供商。首先我们需要一个RestTemplate对象,具体实现代码如下:.spring框架。cloud.client.loadbalancer.LoadBalanced;导入org.springframework.context.annotation.Bean;导入org.springframework.web.client.RestTemplate;@SpringBootApplication@EnableDiscoveryClientpublicclassSpringcloudNacosConsumerApplication{publicstaticvoidmain(String[]args.run(SpringcloudNacosConsumerApplication.class,args);}@LoadBalanced@BeanpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}有了RestTemplate对象,我们就可以调用服务提供者了,调用代码如下:importorg.springframework.beans.factory.annotation.Autowired;导入org.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/"+名称,String.class);}}在“http://spring-cloud-nacos-producer/sayhi/xxx”中“spring-cloud-nacos-producer”为Nacos的服务名,“/sayhi/xxx”为提供的方法访问地址服务提供商。由此可见,服务调用者不需要知道服务提供者的具体地址。只需要调用Nacos提供的服务名即可,实现了服务提供者和调用者(请求地址)的解耦。总结Nacos注册中心提供了两种服务注册和发现的方式:OpenAPI方式和SDK方式,其中SDK方式比较常用,即在项目中添加NacosSDK,然后配置Nacos相关配置。实现服务的自动注册和调用。