Nacos服务注册与发现

简介: 【10月更文挑战第11天】Nacos 是一个开源平台,用于服务发现和配置管理,提供服务注册、发现及动态配置等功能,适用于微服务架构。其核心功能包括服务注册、服务发现和动态配置管理,支持多种语言如 Java、Go、Python 等,具备高可用性和易用性。Nacos 可用于微服务治理、动态扩展和跨语言服务调用等场景,简化了服务间的交互和管理。

一、Nacos 简介


Nacos 是一个用于服务发现和配置管理的开源平台,它提供了简单易用的服务注册与发现功能、动态配置服务等。它是阿里巴巴开源的一个重要项目,在微服务架构中扮演着关键的角色。


  1. 核心功能
  • 服务注册:服务提供者将自己的服务信息(如服务名称、IP 地址、端口号等)注册到 Nacos 服务器。这使得服务可以被其他服务发现并调用。
  • 服务发现:服务消费者从 Nacos 服务器获取服务提供者的信息,从而能够准确地调用服务。它可以根据负载均衡策略等选择合适的服务提供者实例。
  • 动态配置管理:除了服务注册与发现,Nacos 还能够管理服务的配置信息,并且配置可以动态更新,服务可以实时获取最新的配置。
  1. 优势
  • 易于使用:提供了简单的 API 和界面,方便开发人员进行服务的注册和发现操作。
  • 高可用:支持集群部署,能够在复杂的生产环境中保证服务的稳定性和可用性。
  • 支持多种语言:如 Java、Go、Python 等多种编程语言都可以很好地集成 Nacos。


二、服务注册过程


  1. 引入依赖
  • 以 Java Spring Cloud 为例,需要在服务提供者的项目中引入spring - cloud - starter - alibaba - nacos - discovery依赖。在 Maven 项目中,添加如下依赖:


<dependency>
       <groupId>com.alibaba.cloud</groupId>
       <artifactId>spring - cloud - starter - alibaba - nacos - discovery</artifactId>
   </dependency>


  1. 配置文件配置
  • application.ymlapplication.properties文件中配置 Nacos 服务器的地址。例如在application.yml中:


spring:
     cloud:
       nacos:
         discovery:
           server - addr: 127.0.0.1:8848


  • 这里假设 Nacos 服务器运行在本地的8848端口。


  1. 启动服务自动注册
  • 当服务启动时,Spring Cloud Alibaba Nacos Discovery 会自动将服务信息注册到 Nacos 服务器。服务信息包括服务名称(spring.application.name配置项的值)、IP 地址和端口号等。例如,如果服务名称是user - service,那么在 Nacos 的服务列表中就可以看到这个服务被成功注册。


三、服务发现过程


  1. 同样引入依赖和配置 Nacos 地址(同服务注册)
  • 服务消费者也需要引入spring - cloud - starter - alibaba - nacos - discovery依赖和配置 Nacos 服务器地址。
  1. 通过注解或 API 获取服务实例
  • 使用注解方式(以 Spring Cloud 为例)
  • 在服务消费者的代码中,可以使用@LoadBalanced注解结合RestTemplate来实现服务发现和负载均衡。例如:


@Configuration
     public class AppConfig {
         @Bean
         @LoadBalanced
         public RestTemplate restTemplate() {
             return new RestTemplate();
         }
     }


  • 然后在业务代码中,可以像下面这样调用服务:


@Service
     public class UserServiceClient {
         @Autowired
         private RestTemplate restTemplate;
         public String getUserInfo() {
             // user - service是服务提供者在Nacos注册的服务名称
             String url = "http://user - service/user/info";
             return restTemplate.getForObject(url, String.class);
         }
     }


  • 使用 API 方式
  • 也可以通过 Nacos 提供的 Java API 来手动获取服务实例列表,然后根据自己的负载均衡策略选择一个实例进行调用。示例代码如下:


try {
         // 创建Nacos服务发现客户端实例
         NamingService namingService = NacosFactory.createNamingService("127.0.0.1:8848");
         // 获取服务实例列表
         List<Instance> instances = namingService.getAllInstances("user - service");
         // 根据负载均衡策略选择一个实例
         Instance instance = selectInstance(instances);
         // 构建请求URL并调用服务
         String url = "http://" + instance.getIp() + ":" + instance.getPort() + "/user/info";
         // 这里省略实际的HTTP调用代码
     } catch (NacosException e) {
         e.printStackTrace();
     }


  • 其中selectInstance函数是自己实现的负载均衡策略函数,例如可以是简单的随机选择或者轮询等策略。


四、Nacos 服务注册与发现的应用场景


  1. 微服务架构下的服务治理
  • 在微服务架构中,随着服务数量的增加,服务之间的调用关系变得复杂。Nacos 可以帮助管理这些服务,使得服务能够方便地注册自己的信息,并且其他服务能够快速发现并调用它们。例如,在一个电商系统中,订单服务需要调用商品服务来获取商品信息,通过 Nacos 服务注册与发现,订单服务可以轻松找到商品服务的实例进行调用。
  1. 服务的动态扩展和收缩
  • 当业务流量增加时,可能需要增加服务实例的数量来应对。新的服务实例可以自动注册到 Nacos,并且服务消费者可以及时发现这些新实例并将流量分摊到它们上面。相反,当流量减少时,可以减少服务实例,Nacos 会自动更新服务实例列表,服务消费者也会相应地调整调用策略。
  1. 跨语言服务调用
  • 由于 Nacos 支持多种语言,在一个异构的系统中,不同语言编写的服务可以通过 Nacos 进行注册和发现。比如,一个系统中既有 Java 编写的服务,又有 Python 编写的服务,它们都可以注册到 Nacos,并且可以相互发现和调用。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
消息中间件 缓存 NoSQL
热点账户高并发记账方案
热点账户高并发记账方案
1989 0
热点账户高并发记账方案
|
3月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云数据库收费价格:MySQL、Postgre和PostgreSQL费用清单
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费低至1116元,企业版最高性能达4核32GB。具备高可用、弹性扩展、HTAP实时分析能力,广泛应用于金融、互联网、政务等领域,TCO成本降低50%,性能提升数倍。
474 5
|
人工智能 自然语言处理 开发者
AIGC创作活动 | 跟着UP主秋葉一起部署AI视频生成应用!
本次AI创作活动由 B 站知名 AI Up 主“秋葉aaaki”带您学习在阿里云 模型在线服务(PAI-EAS)中零代码、一键部署基于ComfyUI和Stable Video Diffusion模型的AI视频生成Web应用,快速实现文本生成视频的AI生成解决方案,帮助您完成社交平台短视频内容生成、动画制作等任务。制作上传专属GIF视频,即有机会赢取乐歌M2S台式升降桌、天猫精灵、定制保温杯等好礼!
|
消息中间件 数据可视化 关系型数据库
(3)sparkstreaming从kafka接入实时数据流最终实现数据可视化展示
1)我们通过kafka与各个业务系统的数据对接,将各系统中的数据实时接到kafka; 2)通过sparkstreaming接入kafka数据流,定义时间窗口和计算窗口大小,业务计算逻辑处理; 3)将结果数据写入到mysql; 4)通过可视化平台接入mysql数据库,这里使用的是NBI大数据可视化构建平台; 5)在平台上通过拖拽式构建各种数据应用,数据展示;
(3)sparkstreaming从kafka接入实时数据流最终实现数据可视化展示
|
设计模式 缓存 Devops
微服务架构最强讲解,那叫一个通俗易懂!
微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的
33481 3
微服务架构最强讲解,那叫一个通俗易懂!
|
机器学习/深度学习 算法 大数据
大数据中缺失值处理
【10月更文挑战第20天】
1086 4
|
编解码 Dart 网络协议
"震撼揭秘!Flutter如何玩转超低延迟RTSP/RTMP播放,跨平台视频流体验大升级,让你的应用秒变直播神器!"
【8月更文挑战第15天】Flutter作为跨平台UI框架,以其高效性和丰富生态著称。本文详述如何利用flutter_vlc_player等插件在Flutter中实现低延迟RTSP/RTMP播放,并提供代码示例。通过优化播放器设置,如禁用缓冲、启用帧丢弃等,可进一步减少延迟,提升用户观看体验,展现了Flutter在视频流媒体应用中的强大潜力。
691 0
|
Kubernetes API 微服务
「架构风格」SOA(面向服务)和微服务
**SOA与微服务对比摘要**: - **SOA**:企业级,服务粒度大,重用性强,常通过ESB通信,服务部署集中,技术栈统一。 - **微服务**:服务粒度小,单一职责,轻量级协议如REST,独立部署,技术多样性,去中心化治理。 - **区别**:服务大小、独立性、通信协议、部署方式和技术栈不同,微服务更强调敏捷和独立性。 - **示例**:Python Flask简单示例展示了服务创建,SOA服务间通过HTTP请求通信,微服务每个服务独立运行。 - **权衡**:涉及服务发现、负载均衡、容错和安全,常用技术如Docker、Kubernetes和API网关。
1318 0
|
设计模式 关系型数据库 Java
顺畅的职责传递-用责任链模式优化决策流程
本文首先通过经典场景展示了不使用设计模式时的问题与痛点。接着,引入责任链模式,详细讲解了其定义、解决问题的方式、结构图及工作原理,并通过重构示例展示了该模式如何解决原有痛点。最后,对责任链模式的优势、缺点以及在实际应用中可能遇到的挑战和限制进行了总结。责任链模式通过解耦请求发送者和接收者,提供了灵活的请求处理机制,适用于多个处理者按顺序处理请求的场景。然而,该模式也可能导致请求得不到处理或性能下降等问题,需在实际应用中权衡利弊。
857 0
顺畅的职责传递-用责任链模式优化决策流程
|
Java 应用服务中间件 Linux
什么是tomcat, tomcat该如何使用?(java)
什么是tomcat, tomcat该如何使用?(java)
401 1