当前位置: 首页 > news >正文

01-服务注册发现详解

Spring Cloud 服务注册发现详解

一、知识概述

服务注册与发现是微服务架构的核心基础设施,它解决了服务实例动态变化时的地址管理问题。Spring Cloud 提供了多种服务注册中心的支持,包括 Eureka、Nacos、Consul 等。

服务注册发现的核心概念:

  • 服务注册:服务启动时向注册中心注册自己的地址
  • 服务发现:消费者从注册中心获取服务提供者的地址
  • 健康检查:注册中心定期检查服务实例的健康状态
  • 服务续约:服务实例定期向注册中心发送心跳

理解服务注册发现的原理,是构建微服务架构的基础。

二、知识点详细讲解

2.1 服务注册发现架构

服务提供者 注册中心 服务消费者 │ │ │ │──── 注册 ────────────>│ │ │ │ │ │<─── 心跳 ────────────>│ │ │ │ │ │ │<──── 发现 ────────────│ │ │ │ │ │───── 地址列表 ───────>│ │ │ │ │<──────────────────── 直接调用 ───────────────>│

2.2 注册中心对比

特性EurekaNacosConsul
CAPAPAP/CPCP
健康检查心跳心跳/HTTP/TCPHTTP/TCP
配置中心
多数据中心
一致性最终一致可选强一致

2.3 Eureka 核心概念

Eureka Server
  • 服务注册中心
  • 维护服务注册表
  • 提供服务发现接口
Eureka Client
  • 服务提供者:注册服务、发送心跳
  • 服务消费者:获取服务列表、调用服务
核心配置
eureka:client:service-url:defaultZone:http://localhost:8761/eureka/register-with-eureka:true# 是否注册自己fetch-registry:true# 是否获取注册表instance:hostname:localhostlease-renewal-interval-in-seconds:30# 心跳间隔lease-expiration-duration-in-seconds:90# 过期时间

2.4 Nacos 核心概念

命名空间(Namespace)
  • 环境隔离(开发、测试、生产)
  • 租户隔离
分组(Group)
  • 服务分组
  • 默认为 DEFAULT_GROUP
服务(Service)
  • 服务名称
  • 服务实例列表
实例(Instance)
  • IP:Port
  • 权重
  • 健康状态
  • 元数据

2.5 服务注册流程

1. 服务启动 ↓ 2. 读取配置(注册中心地址、服务名称) ↓ 3. 向注册中心发送注册请求 ↓ 4. 注册中心保存服务实例信息 ↓ 5. 开始发送心跳 ↓ 6. 注册中心定期检查实例健康

2.6 服务发现流程

1. 服务启动 ↓ 2. 连接注册中心 ↓ 3. 订阅服务变更 ↓ 4. 获取服务实例列表 ↓ 5. 本地缓存服务列表 ↓ 6. 定期更新缓存 ↓ 7. 使用负载均衡选择实例

三、代码示例

3.1 Eureka Server 搭建

<!-- pom.xml --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication@EnableEurekaServerpublicclassEurekaServerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(EurekaServerApplication.class,args);}}
# application.ymlserver:port:8761eureka:instance:hostname:localhostclient:register-with-eureka:false# 不注册自己fetch-registry:false# 不获取注册表service-url:defaultZone:http://${eureka.instance.hostname}:${server.port}/eureka/server:enable-self-preservation:false# 关闭自我保护(开发环境)eviction-interval-timer-in-ms:60000# 清理间隔spring:application:name:eureka-server

3.2 Eureka Client 服务注册

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.netflix.eureka.EnableEurekaClient;importorg.springframework.web.bind.annotation.*;@SpringBootApplication@EnableEurekaClient@RestControllerpublicclassProviderApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ProviderApplication.class,args);}@GetMapping("/hello")publicStringhello(){return"Hello from Provider!";}}
# application.ymlserver:port:8081spring:application:
http://www.cnnetsun.cn/news/1779765.html

相关文章:

  • 3大核心功能:《工业队长》DoubleQoLMod-zh模组的智能效率优化指南
  • MifareOneTool智能卡操作完全指南:从问题解决到技术原理
  • 如何用drawio-desktop构建跨平台的专业图表工作流
  • Qwen2.5-7B新手部署:如何用最简单的方法运行阿里大模型
  • Python 上位机 + Claude Code 实现试剂研发全自动迭代闭环系统
  • GLM-OCR与计算机组成原理的关联:从指令集到AI推理的算力支撑
  • CAJ格式转换高效解决方案:从学术文献处理痛点到全流程指南
  • DamaiHelper抢票神器:从原理到实战的智能抢票全攻略
  • 浏览器渲染层文档提取技术:kill-doc的技术架构与实现原理深度解析
  • Career-Ops:求职专用智能体
  • 【DLT实战】从零推导PnP:手撕线性方程组与SVD分解求解相机位姿
  • 轴承座夹具设计CAD图纸
  • 解决显示器色彩过饱和:novideo_srgb实现NVIDIA显卡精准色彩校准
  • 从源码拆解Agent Skills与Function Calling,底层实现、核心差异与实操指南
  • 旧设备变砖?这个开源工具让iPhone 4S流畅再战3年
  • 龙芯k - 走马观碑组ST驱动移植傩
  • Qwen-Image-2512-Pixel-Art-LoRA 为React前端项目动态生成像素风插图
  • Git-RSCLIP新手必看:如何用英文标签提升遥感图像分类准确率
  • 3个高效办公秘诀让你成为Office界面定制大师
  • React 19新特性深度体验:用useOptimistic实现秒级交互的实战Demo
  • 基于二阶自抗扰ADRC技术的车辆轨迹跟踪控制:双移线仿真效果优秀,具备抗干扰性,附复现资料快速...
  • mTLS 双向核查,为什么我觉得它更可靠?
  • Python 执行式AI:必备基础与语法速查
  • 【实战教程】Chrome 启用 Remote Debugging 端口 9222(解决 RPA/WorkBuddy 自动化登录卡住、501 错误)
  • 春秋云境CVE-2017-12611
  • Fast-GitHub终极指南:3分钟解决国内访问GitHub龟速问题
  • 终极图像矢量化指南:5分钟实现PNG/JPG到高清SVG转换
  • 逆向工程:为无原理图的RK3399模块定制Armbian系统(1)
  • 合宙ESP32-C3经典款VSCode环境搭建保姆级教程:从网络选择到串口占用的完整避坑指南
  • 告别重复劳动:用STM32CubeIDE为STM32F103C8T6创建可复用的工程模板(含GPIO/RCC配置)