核心内容摘要
探索未知疆域:兽人Boss网站官网入口,开启你的史诗冒险!
Nacos 的微服务注册中心实现详解上一节课关于docker部署的知识点的讲解Docker的部署使用详解在微服务架构中服务数量多、实例动态变化如果仍然写死IP和地址进行调用系统会非常脆弱。
注册中心就是为了解决这个问题而存在的基础设施。
目录点击跳转对应章节
注册中心核心原理
常见注册中心对比
Docker 部署 Nacos
准备 MySQL 数据库
准备 Nacos 环境变量文件
启动 Nacos 容器
访问 Nacos 控制台
服务注册实战item-service
服务发现实战cart-service
使用 DiscoveryClient 做服务发现
负载均衡策略说明
完整调用链
总结
核心理解
总结
注册中心核心原理在微服务远程调用中有两个基本角色服务提供者提供接口例如item-service服务消费者调用接口例如cart-service当服务变多后会出现几个问题服务地址经常变化实例会扩容或宕机调用方难以维护地址列表因此引入第三个角色注册中心其作用是存储、管理服务实例信息并实现服务实例的动态发现。
注册中心三方结构系统中包含三方服务提供者服务消费者注册中心服务注册流程服务启动时会自动向注册中心注册服务名称IP 地址端口号注册中心保存这些实例信息。
服务发现流程服务消费者调用流程向注册中心订阅服务列表获取实例列表本地负载均衡选择实例发起远程调用健康检查机制注册中心通过心跳机制维护实例健康服务定期发送心跳心跳机制服务实例定期发送心跳包心跳包是一个空的 HTTP 请求默认5秒发送一次到注册中心证明自己正常运行。
注册中心超时未收到 → 判定宕机自动剔除实例新实例启动 → 自动注册实例变化 → 推送更新对于注册中心的简单理解注册中心 动态地址簿 健康管理器 实例调度中心动态地址簿注册中心维护服务实例的地址列表服务消费者可以从注册中心获取最新的实例地址。
健康管理器注册中心通过心跳机制监控服务实例的健康状态及时发现并剔除不健康的实例。
实例调度中心注册中心根据负载均衡策略为服务消费者分配可用的服务实例。
注意注册中心只提供列表不做负载均衡
常见注册中心对比注册中心出品公司特点EurekaNetflixSpringCloud 原生Nacos阿里注册 配置中心ConsulHashiCorp多语言支持一般情况下为什么选 Nacos原因如下免费开源中文资料多SpringCloud Alibaba 官方支持同时支持配置中心国内使用广泛
Docker 部署 Nacos为了保证环境干净、部署简单、可重复搭建我们这里采用 Docker 容器方式部署 Nacos 注册中心。
相比直接安装方式Docker 方式具有明显优势环境隔离不污染系统部署速度快配置简单可快速销毁重建便于团队统一环境更贴近生产部署方式
1 部署结构说明本次部署包含两个核心容器MySQL 容器用于存储服务注册信息配置数据命名空间数据集群元数据Nacos 容器负责服务注册服务发现心跳检测实例健康管理服务列表推送
2 前置环境要求在开始之前请确保环境满足必备软件Docker
x Docker Compose可选 MySQL 容器已运行端口占用检查确保以下端口未被占用8848 → Nacos 控制台 9848 → 集群通信端口 9849 → Raft 通信端口检查命令netstat-tunlp|grep8848
准备 MySQL 数据库创建数据库CREATEDATABASEnacos_config;导入初始化表结构下载 Nacos 官方 SQLconf/nacos-mysql.sql导入到 MySQL 容器dockerexec-it mysql容器名bashmysql -uroot -p use nacos_config;source/路径/nacos-mysql.sql;
准备 Nacos 环境变量文件新建文件custom.env内容如下MODEstandalone SPRING_DATASOURCE_PLATFORMmysql MYSQL_SERVICE_HOST你的MySQL容器IP MYSQL_SERVICE_PORT3306 MYSQL_SERVICE_DB_NAMEnacos_config MYSQL_SERVICE_USERroot MYSQL_SERVICE_PASSWORD你的密码关键点MYSQL_SERVICE_HOST 必须写 MySQL 容器IP
启动 Nacos 容器dockerrun -d\--name nacos\--env-file ./custom.env\-p8848:8848\-p9848:9848\-p9849:9849\--restartalways\nacos/nacos-server:v
2.
0-slim
访问 Nacos 控制台浏览器访问http://服务器IP:8848/nacos默认账号密码nacos / nacos注册中心部署完成。
服务注册实战item-service目标把item-service注册到 Nacos。
添加依赖dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency说明同时支持注册 发现所有微服务都可以使用
配置 Nacos 地址spring:application:name:item-servicecloud:nacos:server-addr:
192.
168.
1
101:
启动服务启动后自动注册到 Nacos。
控制台可见item-service
多实例测试修改端口再启动一个实例server:port:8082控制台可看到item-service ├── 实例1 └── 实例2
服务发现实战cart-service目标让 cart-service 调用 item-service。
添加依赖dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency
配置地址spring:cloud:nacos:server-addr:
192.
168.
1