首页 > 其他分享 >Nacos服务注册与发现的2种实现方法!

Nacos服务注册与发现的2种实现方法!

时间:2023-12-27 14:11:07浏览次数:35  
标签:服务 spring Nacos nacos 注册 cloud SDK

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」。

Spring Cloud Alibaba 技术体系中的 Nacos,提供了两个重要的功能:注册中心(服务注册与发现)功能和配置中心功能。

其中注册中心解决了微服务调用中,服务提供者和服务调用者的解耦,让程序开发者可以无需过多的关注服务提供者和调用者的运行细节,只需要通过 Nacos 的注册中心就可以实现两者的互联互通,相当于实现了远程服务本地化,并且提供了健康检查等机制。

而 Nacos 注册中心又提供了两种服务注册和发现的方法:OpenAPI 方法和(Nacos)SDK 方法。

所谓的 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?serviceName=spring-cloud-nacos-producer&ip=192.168.76.224&port=8081'

以上命令的执行结果如下图所示: image.png 当返回“ok”结果时,表示服务注册成功,其中:

  • serviceName:表示服务名。
  • ip:表示客户端程序的 IP 地址。
  • port:表示客户端程序的端口号。

与此同时我们打开 Nacos 管理后台也可以看到我们注册的服务,如下图所示: image.png 点击服务详情,可以看到我们注册的 IP 地址和端口,如下图所示: image.png

1.2 服务注册:SDK模式

SDK 模式需要先创建一个 Spring Cloud 项目,项目创建方法请参考:mp.weixin.qq.com/s/c4EHDWAlT… ,项目创建成功之后添加 Nacos 的 SDK 框架支持,最后再配置 Nacos 的相关信息即可,具体实现如下。

1.2.1 添加 SDK

在 pom.xml 中添加 Nacos SDK 框架支持,具体配置如下:

  xml 复制代码
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

1.2.2 Nacos 配置

SDK 框架添加完成之后,需要在项目的配置文件中添加相应的配置,具体配置内容如下:

  properties 复制代码
# 应用名称
spring.application.name=spring-cloud-nacos-producer
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public

设置完以上配置之后,启动当前项目,程序会自己自动注册到 Nacos 服务端。

2.服务发现

服务被正确注册到 Nacos 之后,就可以通过服务发现正常的调用服务提供者暴露的方法了,它的实现方法依然有以下两种。

2.1 服务发现:OpenAPI模式

在系统命令行中使用以下命令实现服务发现:

curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

执行结果如下所示: image.png 以上内容 JSON 格式化之后的信息如下:

  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,
  "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 框架支持,具体内容如下:

  xml 复制代码
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.2.2 配置 Nacos

在项目的配置文件中添加如下 Nacos 的相关配置:

  properties 复制代码
# 应用名称
spring.application.name=springcloud-nacos-consumer
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public

2.2.3 调用服务提供者

最后一步在项目中使用 RestTemplate 对象,实现调用服务提供者暴露的方法。 首先我们需要一个 RestTemplate 对象,具体实现代码如下:

  java 复制代码
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);
    }
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

有了 RestTemplate 对象之后,我们就可以调用服务提供者了,调用代码如下:

  java 复制代码
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 {
    @Autowired
    private 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/interv…


作者:Java中文社群
链接:https://juejin.cn/post/7062512993891778597
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:服务,spring,Nacos,nacos,注册,cloud,SDK
From: https://www.cnblogs.com/gaoyanbing/p/17930440.html

相关文章

  • Jenkins服务器上创建项目和配置
    大体步骤:General(基础配置)--》源码管理--》构建触发器--》构建环境--》构建--》构建后操作1.创建一个工程2.General(基础配置)仅需填写标准部分,其他可不填写3.源码管理 上图中点击“添加”按钮添加一组账号和密码4.构建触发器 如上图:当前项目的回调地址为:htt......
  • FTP服务器
    FTP服务器:如何把文件传到Ubuntu主机上?1.U盘拷贝2.网络传输- FTP- SFTP演示:使用FTP来传输文件。。。客户端FileZilla(Windows)服务器vsftpd(Ubuntu) ......
  • SpringBoot入门实战:SpringBoot服务层设计
    1.背景介绍SpringBoot是一个用于构建Spring应用程序的优秀框架。它的目标是简化Spring应用程序的开发,使其易于部署和扩展。SpringBoot提供了许多有用的工具,可以帮助开发人员更快地构建和部署应用程序。在本文中,我们将讨论SpringBoot服务层设计的核心概念、算法原理、具......
  • 华为云DLI服务开发与应用_tyt2023
    本实验基于DLI环境,以车联网场景驾驶行为数据分析、电商BI报表分析为案例,提供了完整的端到端最佳实践内容,帮助您更好的使用DLI进行大数据分析和处理。购买OBS服务“产品->存储->对象存储服务OBS”进入OBS页面。点击“管理控制台” 选择“桶列表->创建桶” 区域:华北-北......
  • 002-STM32F103+EC800K(移远4G Cat1)基本控制篇(阿里云物联网平台)--STM32+EC800K使用M
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/EC800K/aliyun.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明阿里......
  • 人工智能和云计算带来的技术变革:从云计算的基础设施到平台服务
    1.背景介绍人工智能(ArtificialIntelligence,AI)和云计算(CloudComputing,CC)是当今最热门的技术趋势之一,它们正在驱动着我们社会的变革。人工智能是指一种使用计算机程序模拟人类智能的技术,包括机器学习、深度学习、自然语言处理、计算机视觉等领域。云计算则是一种基于互联网的计......
  • 写给开发者的软件架构实战:服务降级与服务熔断
    1.背景介绍随着互联网的发展,微服务架构已经成为企业应用中的主流。微服务架构将应用程序拆分成多个小的服务,这些服务可以独立部署和扩展。虽然这种架构带来了许多好处,如更高的灵活性和可扩展性,但它也带来了一些挑战。当服务之间的依赖关系复杂且网络条件不佳时,可能会导致服务之间的......
  • 14-STM32F103+ESP8266+EC800K(移远4G Cat1)--STM32+EC800K以SSL单向认证方式连接MQTT
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/EC800K/my.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明安装的M......
  • CentOS 服务器如何配置时间
    刚安装好的Linux系统时间是错误的,需要进行手动设置以下是查看当前系统时间的命令date tzselect命令修改当前系统时区Asia/Shanghaitimedatectl查看当前时间和时区timedatectlset-timezoneAsia/Shanghai设置亚洲/上海东8区时区查看当前时间和当前时区 安装ntp服......
  • 深度解读:阿里云全球首发的容器计算服务 ACS 诞生背景、核心技术与应用场景
    作者:懿川容器计算服务ACS自从在云栖大会发布并开启邀测后,引起了开发者和企业客户的广泛关注,并收到了大量的产品试用申请。本文整理自容器计算服务ACS首席架构师懿川的分享,包含了产品的诞生背景、核心特性、关键技术和典型应用场景,帮助大家更加全面、更加立体的了解ACS,旨在......