Nacos服务注册与发现的2种实现方法!
作者 | 磊哥
来源 | Java中文社群(ID:javacn666)
转载请联系授权(微信ID:GG_Stone)
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'
以上命令的执行结果如下图所示:当返回“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 框架支持,具体配置如下:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
1.2.2 Nacos 配置
SDK 框架添加完成之后,需要在项目的配置文件中添加相应的配置,具体配置内容如下:
# 应用名称
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'
执行结果如下所示:以上内容 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 框架支持,具体内容如下:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.2.2 配置 Nacos
在项目的配置文件中添加如下 Nacos 的相关配置:
# 应用名称
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 对象,具体实现代码如下:
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@Beanpublic 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
Nacos服务注册与发现的2种实现方法!相关推荐
- SpringCloud-Alibaba之Nacos服务注册和发现
SpringCloud-Alibaba之Nacos服务注册和发现 在这之前我们需要在 windows 或者 linux - 搭建Nacos服务 https://nacos.io/zh-cn/docs/ ...
- 微服务学习之Nacos(服务注册与发现)
微服务系列 1.Nacus 服务搭建及使用 2.Nacos 配置中心 3.Nacos 服务注册与发现之OpenFeign服务间调用 4.Spring Security & Oauth2 认证授 ...
- Nacos服务注册与发现——服务发现
1.概览 1.1.什么是服务发现 在微服务架构中,整个系统会按职责能力划分为多个服务,通过服务之间协作来实现业务目标.这样在我们的代码中免不了要进行服务间的远程调用,服务的消费方要调用服务的生产方,为 ...
- Nacos 服务注册与发现原理分析
Nacos 另一个非常重要的特性就是服务注册与发现,说到服务的注册与发现相信大家应该都不陌生,在微服务盛行的今天,服务是非常重要的,而在 Nacos 中服务更被称为他的一等公民. Nacos 支持几乎 ...
- Nacos服务注册与发现源码剖析
文章目录 前提介绍 Nacos源码下载 Nacos客户端源码 Spring Cloud Starter Nacos 源码 Nacos服务端源码 前提介绍 服务注册与发现作用主要是为了更好的管理众多的服 ...
- 3.Spring Cloud Alibaba教程:Nacos服务注册与发现
概要 官网地址:Nacos官网和帮助文档 Nacos安装:Linux安装Nacos1.3.1(还没安装的先看这篇文章安装) Nacos主要作用:服务注册与发现.配置管理 本篇主要介绍的是服务注册与发现 ...
- Nacos服务注册与发现源码(一)之gRPC协议的实例注册
Nacos核心功能点 服务注册:Nacos Client会通过发送请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址.端口等信息.Nacos Server接收到注册请求 ...
- Nacos服务注册与发现---Nacos简介以及原理
1. 什么是Nacos Nacos是SpringCloud Alibaba的一个服务治理的一个重要组件,英文全称Dynamic Naming and Configurat ...
- nacos服务注册与发现
1.简介 在springloud中,使用过的同学想必对eureka不陌生,eureka是springcloud的注册中心,提供服务的注册于发现功能,与此类似,nacos的注册中心封装并集成了类似eur ...
最新文章
- Flash Socket安全问题的全面解析 服务器端代码
- winxp升级win7教程_WinXP桌面右下角提示网络电脑没有插好的原因及解决方法教程一览-...
- 编写java的应用_编写Java应用程序
- mipony linux客户端,Mipony网盘下载工具
- 构建适用于Oracle 11.2.0.x的Linux单数据库实例的DataGuard
- dart参数传方法_Flutter必备Dart语言快速入门
- Tensroflow练习,包括强化学习、推荐系统、nlp等
- Bailian4042 Rabin-Karp字符串匹配【文本】
- 剖析Volley请求多次的原理
- Python 读取/存储 yaml 文件
- 【PowerDesigner】Constraint name uniqueness问题及处理
- php公众号模板推送开发教程,微信公众号之模板推送
- 测试开发面试题及面试经验
- onenote打开闪退平板_ipad pro 11英寸。onenote闪退 无法使用
- Planning with Goal-Conditioned Policies读书笔记
- linux进入cbq文件夹,Linux流量控制(SFQ/TBFPRIO/CBQ/HTB原理介绍)
- Hapi入门--独立路由
- matlab 创建批量文件夹_PS批量处理图片技巧!
- [转]从LSM-Tree、COLA-Tree谈到StackOverflow、OSQA
- 喜讯 安超云正式成为“同心生态联盟”会员单
热门文章
- 网络诊断提示:远程计算机或设备将不接受连接
- JSON文件报错解决方法(Expected value at 1:0/Expected 'a' at 8:20)
- 补充:学习理论的意义
- mxgraph进阶(五)搭建mxGraph简单应用
- 5.18 c语言--数组--逆序数组问题
- 华为OD机试题,用 Java 解【九宫格按键输入】问题 | 含解题说明
- GJB 5000B与GJB 5000A的区别
- 待定系数法总结笔记(简写)
- matlab 开放,基于MATLAB的小区开放对道路通行影响的研究
- 张驰咨询:关于六西格玛,有一些常见的疑惑!