Nacos系列-Nacos服务注册与发现

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: Nacos系列-Nacos服务注册与发现

服务注册与发现

总结提升

1.故事背景

上文我们讲到了Nacos的配置中心,介绍了什么是Nacos的配置中心,以及它的相关概念和使用方法。接下来我们来讲解Nacos的另外一个重要功能 服务注册与发现,本文将会从概念和实操两个方面,详细介绍如何使用Nacos的服务注册与发现


2.服务注册

在微服务架构中,服务提供者需要将自己的服务注册到服务注册中心,以便服务消费者能够发现并调用这些服务。Nacos作为服务注册中心,提供了服务注册的功能。


2.1服务注册原理

服务注册的原理如下:


服务提供者启动时,将自己的服务实例信息(如服务名称、IP地址、端口号等)通过RESTful API方式发送给Nacos服务端。


Nacos服务端接收到服务提供者发送的注册请求后,将服务实例信息存储在注册中心的数据库中,同时将这些信息缓存到内存中,以便快速查询。


Nacos服务端将注册信息存储在两个地方:一个是持久化的存储(如MySQL、Derby等数据库),用于服务实例的持久化存储;另一个是内存中的缓存,用于快速的服务实例查询。

注册成功后,服务提供者会定时向Nacos发送心跳请求,以表明自己的服务实例还在运行中。

Nacos服务端根据心跳信息更新服务实例的状态,以便服务消费者能够获取到最新的服务实例信息。


服务消费者通过Nacos服务端的RESTful API查询服务注册中心获取到最新的服务实例信息(如服务名称、IP地址、端口号等),从而能够调用服务提供者。

2.2服务注册实现

进入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.3.RELEASE</version>
</dependency>

配置Nacos地址,服务名,端口号

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 # Nacos服务器地址
  application:
    name: service-provider # 服务名
server:
  port: 8080 # 端口号

使用@EnableDiscoveryClient注解,在服务注册项目的启动类上使用@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceProviderApplication.class, args);
    }
}

3服务发现

在微服务架构中,服务消费者需要从服务注册中心获取服务提供者的信息,以便能够调用相应的服务。Nacos作为服务注册中心,提供了服务发现的功能。


3.1 服务发现原理

服务发现的原理如下:


服务消费者启动时,通过RESTful API方式向Nacos服务端发送服务发现请求,请求包括服务名称、版本号、环境等信息。

Nacos服务端接收到服务发现请求后,从注册中心的缓存或持久化存储中查询符合请求条件的服务实例信息,并返回给服务消费者。

服务消费者根据返回的服务实例信息,选择一个合适的服务提供者进行调用。Nacos还提供了负载均衡策略,可以根据配置的负载均衡算法进行服务实例的选择。

服务消费者在调用服务提供者时,可以直接使用服务实例的网络地址(如IP地址、端口号)进行调用,从而实现服务间的通信。

3.2 服务发现实现

引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId> <!-- 添加LoadBalancer的依赖 -->
</dependency>

配置nacos地址

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 # Nacos服务器地址

使用@LoadBalanced注解在服务发现项目的业务逻辑中,使用@LoadBalanced注解来实现负载均衡

@RestController
public class MyController {
    @Autowired
    @LoadBalanced // 使用@LoadBalanced注解
    private RestTemplate restTemplate; // 使用RestTemplate进行服务调用
    @GetMapping("/get")
    public String getServiceUrl() {
        String result = restTemplate.getForObject("http://service-provider/get", String.class); // 使用服务名进行调用
        return result;
    }
}

3.3 @LoadBalanced注解

这里我们详细讲一讲@LoadBalanced注解,此注解的主要作用如下:


负载均衡:@LoadBalanced注解用于开启Ribbon负载均衡功能,使得客户端在进行服务调用时可以自动选择具体的服务提供者进行负载均衡调用。通过负载均衡,可以将请求均匀地分发到多个服务提供者上,从而实现对多个服务实例的负载均衡。


客户端负载均衡策略:@LoadBalanced注解可以用于指定客户端负载均衡策略。例如,可以使用@LoadBalanced注解的value属性来指定使用的负载均衡策略,如@LoadBalanced(value = “myLoadBalancer”),其中"myLoadBalancer"为自定义的负载均衡策略的名称。


服务名称作为请求地址:当使用@LoadBalanced注解时,可以将服务名称作为请求地址,而不是具体的服务URL。这样,Ribbon会根据服务名称自动选择具体的服务实例进行负载均衡调用。例如,可以将请求地址设置为"http://service-provider/service-name",其中"service-provider"为服务名称,Ribbon会自动根据服务名称选择具体的服务实例进行请求。


它可以帮助我们简化服务消费者中的负载均衡调用代码,提高系统的可扩展性和可用性。

总结提升

通过本篇文章相信您已经对Nacos服务注册与发现有了一定的了解。通过使用Nacos的服务注册与发现功能,可以方便地管理和调用微服务,提高了微服务架构的稳定性、可靠性和灵活性。快去按照我的代码去进行尝试吧!!


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
60 5
|
2月前
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
79 2
|
2月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
47 4
|
2月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
62 3
|
2月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
107 3
|
2月前
|
数据管理 Nacos 开发者
"Nacos架构深度解析:一篇文章带你掌握业务层四大核心功能,服务注册、配置管理、元数据与健康检查一网打尽!"
【10月更文挑战第23天】Nacos 是一个用于服务注册发现和配置管理的平台,支持动态服务发现、配置管理、元数据管理和健康检查。其业务层包括服务注册与发现、配置管理、元数据管理和健康检查四大核心功能。通过示例代码展示了如何在业务层中使用Nacos,帮助开发者构建高可用、动态扩展的微服务生态系统。
146 0
|
2月前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
153 0
|
4月前
|
Kubernetes Nacos 容器
nacos注册不上
我正在使用开源的Nacos,并已在Kubernetes中部署了Nacos服务,通过端口映射可在集群外访问Nacos控制台。Kubernetes使用NodePort类型暴露了8848、9848、9849、7848和9555端口,但在尝试注册时遇到问题,出现“Client not connected, current status: STARTING”的错误,导致启动失败。
|
5月前
|
Java Nacos Docker
"揭秘!Docker部署Seata遇上Nacos,注册成功却报错?这些坑你不得不防!一网打尽解决秘籍,让你的分布式事务稳如老狗!"
【8月更文挑战第15天】在微服务架构中,Nacos搭配Seata确保数据一致性时,Docker部署Seata后可能出现客户端连接错误,如“can not connect to services-server”。此问题多由网络配置不当、配置文件错误或版本不兼容引起。解决策略包括:调整Docker网络设置确保可达性;检查并修正`file.conf`和`registry.conf`中的Nacos地址和端口;验证Seata与Nacos版本兼容性;修改配置后重启服务;参考官方文档和最佳实践进行配置。通过这些步骤,能有效排除故障,保障服务稳定运行。
439 0
|
5月前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
131 0