深圳市专业网站建设,邢台seo网站制作,重庆十大装饰公司排名,网站制作设及的技术作者 | 磊哥来源 | Java中文社群#xff08;ID#xff1a;javacn666#xff09;转载请联系授权#xff08;微信ID#xff1a;GG_Stone#xff09;Spring Cloud Alibaba 技术体系中的 Nacos#xff0c;提供了两个重要的功能#xff1a;注册中心#xff08;服务注册与发… 作者 | 磊哥来源 | Java中文社群IDjavacn666转载请联系授权微信IDGG_StoneSpring Cloud Alibaba 技术体系中的 Nacos提供了两个重要的功能注册中心服务注册与发现功能和配置中心功能。其中注册中心解决了微服务调用中服务提供者和服务调用者的解耦让程序开发者可以无需过多的关注服务提供者和调用者的运行细节只需要通过 Nacos 的注册中心就可以实现两者的互联互通相当于实现了远程服务本地化并且提供了健康检查等机制。而 Nacos 注册中心又提供了两种服务注册和发现的方法OpenAPI 方法和NacosSDK 方法。所谓的 OpenAPI 是指通过 Nacos 提供的开放 API 地址实现服务的注册与发现而 SDK 方法是通过 Nacos 提供的 SDK 框架也就是使用 spring-cloud-starter-alibaba-nacos-discovery 框架来实现服务注册与发现的功能。1.服务注册1.1 服务注册OpenAPI模式OpenAPI 的使用方式相对来说比较简单首先打开系统的命令行在系统命令行中使用以下命令实现服务注册curl -X POST http://127.0.0.1:8848/nacos/v1/ns/instance?serviceNamespring-cloud-nacos-producerip192.168.76.224port8081以上命令的执行结果如下图所示当返回“ok”结果时表示服务注册成功其中serviceName表示服务名。ip表示客户端程序的 IP 地址。port表示客户端程序的端口号。与此同时我们打开 Nacos 管理后台也可以看到我们注册的服务如下图所示点击服务详情可以看到我们注册的 IP 地址和端口如下图所示1.2 服务注册SDK模式SDK 模式需要先创建一个 Spring Cloud 项目项目创建方法请参考https://mp.weixin.qq.com/s/c4EHDWAlTXKr3Xl17biglA项目创建成功之后添加 Nacos 的 SDK 框架支持最后再配置 Nacos 的相关信息即可具体实现如下。1.2.1 添加 SDK在 pom.xml 中添加 Nacos SDK 框架支持具体配置如下dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency1.2.2 Nacos 配置SDK 框架添加完成之后需要在项目的配置文件中添加相应的配置具体配置内容如下# 应用名称
spring.application.namespring-cloud-nacos-producer
# Nacos认证信息
spring.cloud.nacos.discovery.usernamenacos
spring.cloud.nacos.discovery.passwordnacos
# Nacos 服务发现与注册配置其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr127.0.0.1:8848
# 注册到 nacos 的指定 namespace默认为 public
spring.cloud.nacos.discovery.namespacepublic设置完以上配置之后启动当前项目程序会自己自动注册到 Nacos 服务端。2.服务发现服务被正确注册到 Nacos 之后就可以通过服务发现正常的调用服务提供者暴露的方法了它的实现方法依然有以下两种。2.1 服务发现OpenAPI模式在系统命令行中使用以下命令实现服务发现curl -X GET http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceNamenacos.naming.serviceName执行结果如下所示以上内容 JSON 格式化之后的信息如下{name: DEFAULT_GROUPspring-cloud-nacos-producer,groupName: DEFAULT_GROUP,clusters: ,cacheMillis: 10000,hosts: [{instanceId: 192.168.76.224#8081#DEFAULT#DEFAULT_GROUPspring-cloud-nacos-producer,ip: 192.168.76.224,port: 8081,weight: 1,healthy: true,enabled: true,ephemeral: true,clusterName: DEFAULT,serviceName: DEFAULT_GROUPspring-cloud-nacos-producer,metadata: {preserved.register.source: SPRING_CLOUD},instanceHeartBeatInterval: 5000,instanceHeartBeatTimeOut: 15000,ipDeleteTimeout: 30000}],lastRefTime: 1644210068852,checksum: ,allIPs: false,reachProtectionThreshold: false,valid: true
}其中healthy表示是否开启健康检测功能也就是定期的将自己的健康状态报告给 Nacos 服务器端。ephemeral表示是否为临时实例临时实例下线一段时间之后会被 Nacos 直接剔除。“instanceHeartBeatInterval: 5000”表示每 5s 执行一次健康检测。“instanceHeartBeatTimeOut: 15000”表示如果超过 15s 没有收到客户端心跳包就将此实例设置为非健康状态。“ipDeleteTimeout: 30000”表示如果超过 30s 没有收到心跳包就剔除临时实例。2.2 服务发现SDK模式与 SDK 实现服务注册的步骤类似服务发现也是先要创建 Spring Cloud 项目然后添加 Nacos SDK 框架再配置 Nacos 相关信息最后编写代码来调用服务提供者提供的方法。2.2.1 添加 SDK在项目的 pom.xml 文件中添加 Nacos SDK 框架支持具体内容如下dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency2.2.2 配置 Nacos在项目的配置文件中添加如下 Nacos 的相关配置# 应用名称
spring.application.namespringcloud-nacos-consumer
# Nacos认证信息
spring.cloud.nacos.discovery.usernamenacos
spring.cloud.nacos.discovery.passwordnacos
# Nacos 服务发现与注册配置其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr127.0.0.1:8848
# 注册到 nacos 的指定 namespace默认为 public
spring.cloud.nacos.discovery.namespacepublic2.2.3 调用服务提供者最后一步在项目中使用 RestTemplate 对象实现调用服务提供者暴露的方法。首先我们需要一个 RestTemplate 对象具体实现代码如下import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;SpringBootApplication
EnableDiscoveryClient
public class SpringcloudNacosConsumerApplication {public static void main(String[] args) {SpringApplication.run(SpringcloudNacosConsumerApplication.class, args);}LoadBalancedBeanpublic RestTemplate restTemplate() {return new RestTemplate();}
}有了 RestTemplate 对象之后我们就可以调用服务提供者了调用代码如下import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;RestController
public class TestController {Autowiredprivate RestTemplate restTemplate;RequestMapping(/hi)public String hi(String name) {// 调用服务提供者的 sayhi 方法并将结果返回return restTemplate.getForObject(http://spring-cloud-nacos-producer/sayhi/ name,String.class);}
}其中“http://spring-cloud-nacos-producer/sayhi/xxx”中的“spring-cloud-nacos-producer”为 Nacos 的服务名“/sayhi/xxx”为服务提供者提供的方法访问地址。从这里可以看出在服务调用者这里无需知道服务提供者的具体地址只需要调用 Nacos 提供的服务名就可以了这样就实现了服务提供者和调用者的请求地址解耦了。小结Nacos 注册中心提供了两种服务注册与发现的方法OpenAPI 方式和 SDK 方式其中比较常用的是 SDK 的实现方式也就是在项目中添加 Nacos 的 SDK再配置好 Nacos 的相关配置就可以实现服务的自动注册和调用了。是非审之于己毁誉听之于人得失安之于数。公众号Java中文社群Java面试合集gitee.com/mydb/interview往期推荐Spring Cloud Alibaba Nacos 服务注册与发现功能实现2022-02-07 Spring Boot Admin贼好使2022-01-14 Spring Boot Admin 报警提醒和登录验证功能实现2022-01-26