欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > Nacos Discovery--服务治理

Nacos Discovery--服务治理

2025/6/18 11:26:06 来源:https://blog.csdn.net/red_Apple_3_11/article/details/148717756  浏览:    关键词:Nacos Discovery--服务治理

服务治理介绍

服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。

服务注册:在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供服 务的详细信息。并在注册中心形成一张服务的清单,服务注 册中心需要以心跳的方式去监测清单中 的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。

服务发现:服务调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实 例的访问。

 通过上面的调用图会发现,除了微服务,还有一个组件是服务注册中心,它是微服务架构非常重要 的一个组件,在微服务架构里主要起到了协调者的一个作用。

常见的注册中心

        Zookeeper zookeeper 是一个分布式服务框架,是Apache 的一个子项目,它主要是用来解决分布式 应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用 配置项的管理等。

        Eureka Eureka是Spring Cloud 微服务框架默认的也是推荐的服务注册中心,由 Netflix 公司与 2012 将其开源出来,主要作用就是做服务注册和发现。但是现在已经闭源,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。

        Nacos Nacos 是阿里巴巴最新开源的项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是 Spring Cloud Alibaba组件之一,负责服务注册发现和服务配置。

nacos

        Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速 实现动态服务发现、服务配置、服务元数据及流量管理。 从上面的介绍就可以看出,nacos 的作用就是一个注册中心,用来管理注册上来的各个微服务。

搭建 nacos 环境

第 1 步: 安装 nacos 下载地址: https://github.com/alibaba/nacos/releases 下载 zip 格式的安装包,然后进行解压缩操作

第 2 步: 启动 nacos #切换目录 cd nacos/bin #命令启动 startup.cmd -m standalone

第 3 步: 访问 nacos 打开浏览器输入 http://localhost:8848/nacos,即可访问服务,默认密码是nacos/nacos

接下来在微服务的总体的xml中配置dependence

1 在 pom.xml 中添加 nacos 的依赖

<!--nacos 客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2 在启动类上添加@EnableDiscoveryClient 注解

@SpringBootApplication
@EnableDiscoveryClient
@MapperScan("com.ffyc.springcloudshop.dao")
public class ShopUserApplication {
public static void main(String[] args) {
SpringApplication.run(ShopUserApplication.class);
}
}

3 在 application.yml 中为每个微服务定义服务名,并添加nacos 服务的地址

spring:
application:
name: service-user #服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #nacos 地址

4 启动服务, 观察 nacos 的控制面板中是否有注册上来的商品微服务

 服务调用

使用 nacos 客户端根据服务名动态获取服务地址和端口

@Autowired

DiscoveryClient discoveryClient;

//使用注册中心的客户端,通过服务名去注册中心找服务        服务的获取和调用ServiceInstance productService = discoveryClient.getInstances("service-product").get(0);ServiceInstance userService = discoveryClient.getInstances("service-user").get(0);Product product  = restTemplate.getForObject("http://"+productService.getHost()+":"+productService.getPort()+"/product/get/"+pid, Product.class);User user  = restTemplate.getForObject("http://"+userService.getHost()+":"+userService.getPort()+"/user/get/"+uid, User.class);

附加原本之间的服务相互调用是

 //查询商品,查询用版本1   // 使用地址直接调用接口   
//地址变了得改代码 ,多个服务负载均衡不了,不知道调用哪一个Product product  = restTemplate.getForObject("http://127.0.0.1:8091/product/get/"+pid, Product.class);User user  = restTemplate.getForObject("http://127.0.0.1:8081/user/get/"+uid, User.class);

其他

 手动的restTemlate与nacos比较  

1. 自动注册与发现,无需手动维护地址
  • RestTemplate 的痛点:调用方需硬编码目标服务的 IP 和端口(如http://localhost:8081/api/xxx),若服务实例动态扩缩容或部署位置变更,需手动修改地址,维护成本高。
  • Nacos 的优势
    • 服务启动时自动向 Nacos 注册实例(包含 IP、端口、健康状态等信息)。
    • 调用方通过服务名(如service-order)而非具体地址调用,Nacos 动态返回可用实例列表,无需人工干预。
    • 案例:当订单服务扩展到 3 个实例时,Nacos 会自动将新实例加入列表,调用方无需修改代码。
2. 动态路由与负载均衡:流量均匀分配
  • RestTemplate 的痛点:需手动实现负载均衡(如轮询 IP 列表),或集成 Ribbon 等组件,配置复杂。
  • Nacos 的优势
    • 内置负载均衡策略(如权重轮询、随机、一致性哈希),可根据实例权重、负载状态动态分配流量。
    • 支持基于元数据的路由(如根据机房、版本号筛选实例),满足灰度发布等场景。
    • 示例:通过 Nacos 配置,让新版本服务实例优先接收 20% 流量,实现平滑升级。

二、服务健康管理:自动剔除故障实例

1. 实时健康检查,保障调用可靠性
  • RestTemplate 的痛点:无法自动感知服务实例的故障,可能持续向不可用实例发送请求,导致调用失败。
  • Nacos 的优势
    • 支持 TCP、HTTP、MySQL 等多种健康检查方式,定期检测实例状态。
    • 发现故障实例时自动标记为 “不健康”,暂时从路由列表中剔除,避免流量流入。
    • 场景:当某订单服务实例因内存溢出崩溃时,Nacos 会立即停止向其转发请求,保证调用成功率。
2. 故障恢复自动感知
  • 当故障实例重启或恢复后,Nacos 会重新将其加入可用列表,无需人工干预。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词