news 2026/4/23 15:40:25

Nacos 的微服务注册中心实现详解(基于黑马商城部署)(springcloud微服务课day4)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nacos 的微服务注册中心实现详解(基于黑马商城部署)(springcloud微服务课day4)

Nacos 的微服务注册中心实现详解

上一节课关于docker部署的知识点的讲解:Docker的部署使用详解

在微服务架构中,服务数量多、实例动态变化,如果仍然写死IP和地址进行调用,系统会非常脆弱。
注册中心就是为了解决这个问题而存在的基础设施。


📚 目录(点击跳转对应章节)

一、注册中心核心原理
二、常见注册中心对比
三、Docker 部署 Nacos
四、准备 MySQL 数据库
五、准备 Nacos 环境变量文件
六、启动 Nacos 容器
七、访问 Nacos 控制台
八、服务注册实战(item-service)
九、服务发现实战(cart-service)
十、使用 DiscoveryClient 做服务发现
十一、负载均衡策略说明
十二、完整调用链总结
十三、核心理解总结


一、注册中心核心原理

在微服务远程调用中,有两个基本角色:

  • 服务提供者:提供接口,例如item-service
  • 服务消费者:调用接口,例如cart-service

当服务变多后,会出现几个问题:

  • 服务地址经常变化
  • 实例会扩容或宕机
  • 调用方难以维护地址列表

因此引入第三个角色:

注册中心
其作用是存储、管理服务实例信息,并实现服务实例的动态发现。


注册中心三方结构

系统中包含三方:

  • 服务提供者
  • 服务消费者
  • 注册中心

服务注册流程

服务启动时会自动向注册中心注册:

  • 服务名称
  • IP 地址
  • 端口号

注册中心保存这些实例信息。


服务发现流程

服务消费者调用流程:

  1. 向注册中心订阅服务列表
  2. 获取实例列表
  3. 本地负载均衡选择实例
  4. 发起远程调用

健康检查机制

注册中心通过心跳机制维护实例健康:

  • 服务定期发送心跳

心跳机制:服务实例定期发送心跳包(心跳包是一个空的 HTTP 请求,默认5秒发送一次)到注册中心,证明自己正常运行。

  • 注册中心超时未收到 → 判定宕机
  • 自动剔除实例
  • 新实例启动 → 自动注册
  • 实例变化 → 推送更新

对于注册中心的简单理解

注册中心 = 动态地址簿 + 健康管理器 + 实例调度中心

动态地址簿:注册中心维护服务实例的地址列表,服务消费者可以从注册中心获取最新的实例地址。
健康管理器:注册中心通过心跳机制监控服务实例的健康状态,及时发现并剔除不健康的实例。
实例调度中心:注册中心根据负载均衡策略,为服务消费者分配可用的服务实例。

注意:

注册中心只提供列表,不做负载均衡


二、常见注册中心对比

注册中心出品公司特点
EurekaNetflixSpringCloud 原生
Nacos阿里注册 + 配置中心
ConsulHashiCorp多语言支持

一般情况下为什么选 Nacos?

原因如下:

  • 免费开源
  • 中文资料多
  • SpringCloud Alibaba 官方支持
  • 同时支持配置中心
  • 国内使用广泛

三、Docker 部署 Nacos

为了保证环境干净、部署简单、可重复搭建,我们这里采用 Docker 容器方式部署 Nacos 注册中心。相比直接安装方式,Docker 方式具有明显优势:

  • 环境隔离,不污染系统

  • 部署速度快

  • 配置简单

  • 可快速销毁重建

  • 便于团队统一环境

  • 更贴近生产部署方式

3.1 部署结构说明

本次部署包含两个核心容器:

MySQL 容器

用于存储:

  • 服务注册信息
  • 配置数据
  • 命名空间数据
  • 集群元数据

Nacos 容器

负责:

  • 服务注册
  • 服务发现
  • 心跳检测
  • 实例健康管理
  • 服务列表推送

3.2 前置环境要求

在开始之前,请确保环境满足:

必备软件

Docker >= 20.x Docker Compose(可选) MySQL 容器已运行

端口占用检查

确保以下端口未被占用:

8848 → Nacos 控制台 9848 → 集群通信端口 9849 → Raft 通信端口

检查命令:

netstat-tunlp|grep8848

四、准备 MySQL 数据库

创建数据库

CREATEDATABASEnacos_config;

导入初始化表结构

下载 Nacos 官方 SQL:

conf/nacos-mysql.sql

导入到 MySQL 容器:

dockerexec-it mysql容器名bashmysql -uroot -p use nacos_config;source/路径/nacos-mysql.sql;

五、准备 Nacos 环境变量文件

新建文件:

custom.env

内容如下:

MODE=standalone SPRING_DATASOURCE_PLATFORM=mysql MYSQL_SERVICE_HOST=你的MySQL容器IP MYSQL_SERVICE_PORT=3306 MYSQL_SERVICE_DB_NAME=nacos_config MYSQL_SERVICE_USER=root MYSQL_SERVICE_PASSWORD=你的密码

关键点:

MYSQL_SERVICE_HOST 必须写 MySQL 容器IP


六、启动 Nacos 容器

dockerrun -d\--name nacos\--env-file ./custom.env\-p8848:8848\-p9848:9848\-p9849:9849\--restart=always\nacos/nacos-server:v2.1.0-slim

七、访问 Nacos 控制台

浏览器访问:

http://服务器IP:8848/nacos

默认账号密码:

nacos / nacos

注册中心部署完成。


八、服务注册实战(item-service)

目标:把item-service注册到 Nacos。


1. 添加依赖

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

说明:

  • 同时支持注册 + 发现
  • 所有微服务都可以使用

2. 配置 Nacos 地址

spring:application:name:item-servicecloud:nacos:server-addr:192.168.150.101:8848

3. 启动服务

启动后自动注册到 Nacos。

控制台可见:

item-service

4. 多实例测试

修改端口再启动一个实例:

server:port:8082

控制台可看到:

item-service ├── 实例1 └── 实例2

九、服务发现实战(cart-service)

目标:让 cart-service 调用 item-service。


1. 添加依赖

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

2. 配置地址

spring:cloud:nacos:server-addr:192.168.150.101:8848

十、使用 DiscoveryClient 做服务发现


注入组件

@AutowiredprivateDiscoveryClientdiscoveryClient;

获取实例列表

List<ServiceInstance>instances=discoveryClient.getInstances("item-service");

随机负载均衡

ServiceInstanceinstance=instances.get(newRandom().nextInt(instances.size()));

构造调用地址

Stringurl=instance.getUri()+"/item/"+id;Itemitem=restTemplate.getForObject(url,Item.class);

十一、负载均衡策略说明

常见负载均衡算法:

  • 随机
  • 轮询
  • IP Hash
  • 最少连接
  • 权重调度

后续可以升级为:

SpringCloud LoadBalancer OpenFeign

自动负载均衡调用。


十二、完整调用链总结


服务提供者

启动 → 注册 → 心跳 → 健康维护


注册中心

存储 → 检测 → 剔除 → 推送更新


服务消费者

订阅 → 获取列表 → 负载均衡 → 调用


十三、核心理解总结

注册中心解决的不是"调用问题",而是:

  • 地址解耦
  • 实例动态管理
  • 容错与高可用

自此,微服务之间不用再记住彼此地址,而是通过注册中心找到彼此。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:36:58

超市管理|基于ssm 超市管理系统(源码+数据库+文档)

超市管理 目录 基于ssm vue超市管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于ssm vue超市管理系统 一、前言 博主介绍&#xff1a;✌️大厂码农|毕设布道…

作者头像 李华
网站建设 2026/4/23 11:34:53

AI写论文哪个软件最好?宏智树AI凭全流程合规硬核领跑毕业季

作为深耕论文写作科普的教育测评博主&#xff0c;毕业季后台每天都被“AI写论文选哪个”的提问刷屏。不少同学踩过“AI生成内容文献造假”“数据无溯源被导师质疑”“格式混乱反复修改”的坑&#xff0c;实则选对工具&#xff0c;毕业论文写作能少走80%的弯路。 实测多款主流A…

作者头像 李华
网站建设 2026/4/23 11:36:36

小程序计算机毕设之基于SpringBoot与微信小程序的乡镇医院挂号预约系统基于springboot的医院门诊智能预约平台小程序设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/18 15:54:33

LangGraph--StateGraph

1. StateGraph 是什么&#xff1f; StateGraph 是一个 图构建器&#xff0c;它本身不执行&#xff0c;只负责&#xff1a; 定义状态结构定义节点逻辑定义节点之间的顺序 / 条件分支 / 路由定义上下文 Context定义输入输出 Schema ⚠️ 注意&#xff1a;StateGraph 不能直接运…

作者头像 李华
网站建设 2026/4/15 18:16:18

基于springboot的救援物资管理系统-计算机毕业设计源码+LW文档

基于SpringBoot的救援物资管理系统 摘要&#xff1a;本文围绕基于SpringBoot的救援物资管理系统展开&#xff0c;阐述了其研究背景意义、需求分析及功能设计。随着灾害事件频发&#xff0c;救援物资管理的重要性日益凸显&#xff0c;传统管理方式存在诸多弊端&#xff0c;该系统…

作者头像 李华
网站建设 2026/4/23 13:16:53

国标GB28181安防监控平台EasyCVR油田油井智能监管体系构建与应用实践

随着油气勘探开发向深层、偏远区域延伸&#xff0c;油田油区呈现出油水井点多面广、管网纵横交错、作业环境复杂等显著特征。传统监控模式已难以适配安全生产、高效运维的核心需求。随着工业物联网与智能视频分析技术的成熟&#xff0c;构建一个统一、智能的远程视频监控平台成…

作者头像 李华