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/v...'上述命令的执行结果如下图所示:当返回“ok”的结果时,表示服务注册成功,其中:serviceName:表示服务名称。ip:表示客户端程序的IP地址。port:表示客户端程序的端口号。同时我们也可以通过打开Nacos管理后台看到我们注册的服务,如下图:点击服务详情,可以看到我们注册的IP地址和端口,如下图:1.2服务注册:SDK方式SDK方式需要先创建一个SpringCloud项目。项目创建方法请参考:https://mp.weixin.qq.com/s/c4...项目创建成功后,添加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/v...'执行结果如下:以上内容为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",“元数据”:{“preserved.register.source”:“SPRING_CLOUD”},“instanceHeartBeatInterval”:5000,"instanceHeartBeatTimeOut":15000,"ipDeleteTimeout":30000}],"lastRefTime":1644210068852,"checksum":"","allIPs":false,"reachProtectionThreshold":false,"valid":true}其中:健康:表示是否开启健康检测功能,即定时向Nacos服务器上报自己的健康状态ephemeral:表示是否为临时实例,临时实例下线一段时间后,会被Nacos.""instanceHeartBeatInterval":5000":表示每5s进行一次健康检查。""instanceHeartBeatTimeOut":15000":表示如果超过15s没有收到(client)心跳包,则本实例设置为unhealthystate.""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对象在项目中实现通过调用服务提供者公开的方法。首先我们需要一个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/"+name,String.class);}}其中"spring-"cloud-nacos-producer"是Nacos的服务名,"/sayhi/xxx"是服务提供者提供的方法访问地址,由此可见服务调用者并没有需要知道服务提供者的具体地址,只需要调用Nacos提供的服务名就可以了,这样服务提供者和调用者(请求地址)就解耦了总结Nacos注册中心提供了服务注册和发现两种方法:OpenAPI方式和SDK方式,其中SDK方式比较常用,即在项目中添加NacosSDK,然后配置Nacos相关配置。实现服务的自动注册和调用。判断是非人在人为,名誉在人,得失以数论。公众号:Java中文社区Java访谈合集:https://gitee.com/mydb/interview