1.Eureka 基础概念

Eureka 是 Netflix 开发的服务注册与发现组件,是 Spring Cloud 微服务架构中的核心模块,用于解决微服务间的自动发现与通信问题。其核心功能包括:

  • 服务注册:服务实例将自身信息(IP、端口、健康状态等)注册到 Eureka Server。
  • 服务发现:服务消费者从 Eureka Server 获取可用服务列表。
  • 服务健康检查:通过心跳机制检测服务实例的存活状态。

2.Eureka 架构原理

1. 核心组件
  • Eureka Server:服务注册中心,维护服务实例列表,提供注册、发现、剔除功能。
  • Eureka Client:分为服务提供者(Producer)和服务消费者(Consumer),负责与 Server 交互。
  • 注册中心集群:多个 Eureka Server 互相复制数据,实现高可用性。

2. 服务注册与发现流程

1. 服务注册

  • 服务启动时,Client 向 Server 发送注册请求,携带服务元数据(如服务名、IP、端口)。
  • Server 接收请求后,将服务信息存入注册表,并返回注册成功响应。

2. 心跳续约

  • Client 定期(默认 30 秒)向 Server 发送心跳请求(续约),表明服务存活。
  • 若 Server 超过一定时间(默认 90 秒)未收到心跳,会将服务标记为“过期”并剔除。

3. 服务发现

  • Consumer 启动时,从 Server 获取服务列表并缓存到本地。
  • Consumer 调用服务时,从本地缓存获取服务实例(通常结合负载均衡算法)。

4. 服务剔除

  • Server 定期扫描注册表,剔除过期(无心跳)的服务实例。
  • Client 停止服务时,会主动向 Server 发送取消注册请求。

3. 自我保护模式(Self-Preservation Mode)
  • 触发条件:当 Server 检测到大量服务实例心跳失败(如网络分区),会进入自我保护模式。
  • 核心逻辑:暂停剔除服务实例,避免健康服务被误删。
  • 影响:此时 Server 可能包含已失效的服务实例,Consumer 需结合客户端健康检查(如 Ribbon + Hystrix)确保调用有效性。

4. 数据一致性
  • Eureka Server 采用去中心化架构,Server 之间通过异步复制实现数据同步。
  • 因此,服务注册信息可能存在短暂不一致,但满足最终一致性。

3.Eureka 使用详解

1. 环境准备

- JDK 1.8+

  • Spring Boot 2.x
  • Spring Cloud 对应版本(如 Greenwich、Hoxton)

2. 搭建 Eureka Server
步骤 1:添加 Maven 依赖

<dependencies><!-- Eureka Server 依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

步骤 2:配置 application.yml

server:port: 8761  # Eureka Server 端口eureka:instance:hostname: localhost  # 本地测试用,生产环境用域名或IPclient:# 是否将自己注册为服务(Server 本身不需要注册)register-with-eureka: false# 是否从 Eureka Server 获取服务列表(Server 不需要)fetch-registry: false# Eureka Server 地址(集群时多个地址用逗号分隔)service-url:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/server:# 关闭自我保护模式(生产环境谨慎使用)enable-self-preservation: false# 剔除过期服务的时间间隔(毫秒)eviction-interval-timer-in-ms: 60000

步骤 3:启动类添加注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer  // 启用 Eureka Server 功能
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

3. 服务提供者(Producer)注册
步骤 1:添加依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

步骤 2:配置 application.yml

server:port: 8081  # 服务端口spring:application:name: service-producer  # 服务名称,用于注册eureka:client:service-url:defaultZone: http://localhost:8761/eureka/  # Eureka Server 地址instance:# 注册到 Eureka 的实例 IP(默认用 hostname,建议显式指定 IP)ip-address: 127.0.0.1# 端口是否暴露(用于健康检查)port:enable: true# 实例ID格式(服务名+IP+端口)instance-id: ${spring.application.name}:${eureka.instance.ip-address}:${server.port}# 心跳续约间隔(秒,默认30秒)lease-renewal-interval-in-seconds: 10# 心跳过期时间(秒,默认90秒)lease-expiration-duration-in-seconds: 30

步骤 3:启动类(无需额外注解,自动注册)

4. 服务消费者(Consumer)发现服务
步骤 1:添加依赖(同服务提供者)

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 如需负载均衡,添加 Ribbon 依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

步骤 2:配置 application.yml

server:port: 8082spring:application:name: service-consumereureka:client:service-url:defaultZone: http://localhost:8761/eureka/# 示例:使用 Ribbon 进行负载均衡调用
@Configuration
public class RibbonConfig {
    @Bean
    @LoadBalanced  // 开启负载均衡
    public RestTemplate restTemplate() {
        return new RestTemplate();}
}// 服务调用示例
@Service
public class UserService {
    @Autowired
    private RestTemplate restTemplate;    public String getUser() {
        // 通过服务名调用(Ribbon 自动选择实例)
        return restTemplate.getForObject("http://service-producer/user/1", String.class);}
}

5. 高可用集群部署
  • 原理:多个 Eureka Server 互相注册,形成集群(如 Server A 注册到 Server B,Server B 注册到 Server A)。
  • 配置示例(Server A 的 application.yml):

eureka:client:service-url:defaultZone: http://serverB:8762/eureka/  # 注册到 Server B

  • 注意:生产环境建议使用域名或负载均衡器指向集群,避免硬编码多个地址。

4.Eureka 核心参数调优

参数名

作用

默认值

建议生产值

eureka.instance.lease-renewal-interval-in-seconds

心跳续约间隔(秒),缩短可加快服务状态更新,但增加网络开销

30

10-15

eureka.instance.lease-expiration-duration-in-seconds

心跳过期时间(秒),超过此时间未收到心跳则剔除服务

90

30-45

eureka.server.eviction-interval-timer-in-ms

剔除过期服务的扫描间隔(毫秒)

60000

30000

eureka.server.enable-self-preservation

是否开启自我保护模式,生产环境建议开启,避免网络波动导致服务误删

true

true

eureka.client.registry-fetch-interval-seconds

服务消费者获取服务列表的间隔(秒)

5.Eureka 与其他服务发现组件对比

组件

一致性模型

健康检查方式

支持功能

社区活跃度

Eureka

最终一致性

客户端心跳(主动)

服务注册发现、自我保护

较低(Netflix 已停止维护)

Consul

强一致性(Raft)

客户端心跳 + 服务端主动检查

服务注册、健康检查、配置中心、服务网格

Nacos

最终一致性 / 强一致性

客户端心跳 + 服务端主动检查

服务注册、配置中心、流量管理

高(阿里维护)

6.注意事项

1. 生产环境建议

  • 开启自我保护模式(`enable-self-preservation: true`)。
  • 部署至少 3 个 Eureka Server 节点形成集群。
  • 结合客户端健康检查(如 Ribbon + Hystrix)处理失效服务。

2. Netflix 停止维护

  • Eureka 1.x 已进入维护模式,建议新项目考虑 Consul 或 Nacos。
  • Spring Cloud 已推出 `spring-cloud-starter-cloud-eureka` 适配 Eureka 2.x(需自行构建)。

3. 服务发现优化

  • 服务消费者启用本地缓存(Eureka 自动实现),减少对 Server 的调用压力。
  • 大型系统中按业务域拆分注册中心,避免单中心负载过高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87031.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87031.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/87031.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

create_react_agent + MCP tools

文章目录 MCP tools 调用结果输出MCP Tool 内容成功返回失败返回 普通工具调用 https://blog.csdn.net/2401_89025022/article/details/148629902 MCP tools 调用 import time import asyncio import json from langgraph.prebuilt import create_react_agent from langch…

提示词Prompts(1)

摘要&#xff1a; 本文介绍了langchain.prompts中基础的提示词模板的用法&#xff0c;包括基础的文本模板、对话模板、小样本模板、以及主要两种样本选择器的用法。 文章目录 1. prompts介绍&#xff1f;2. 提示词模板体系 Prompt Templates2.1 基础文本模板 PromptTemplate2.2…

如何在 Elementary OS 上安装最新版本的 VirtualBox

Elementary OS 是一个基于 Ubuntu Linux 的发行版&#xff0c;它易于使用&#xff0c;对初学者友好&#xff0c;并且在用户中非常受欢迎。如果你是 Elementary OS 的用户&#xff0c;并且想在上面虚拟运行和探索其他操作系统&#xff0c;那么 Oracle VirtualBox 是一个非常不错…

uni-app项目loading显示方案

前情 uni-app是我比较喜欢的跨平台框架&#xff0c;它能开发小程序/H5/APP(安卓/iOS)&#xff0c;重要的是对前端开发友好&#xff0c;自带的IDE可视化的运行和打包也让开发体验也非常棒&#xff0c;公司项目就是主推uni-app&#xff0c;为了用户体验对于耗时操作&#xff0c;…

【Android笔记】记一次 CMake 构建 Filament Android 库的完整排错过程(安卓交叉编译、CMake、Ninja)

写在前面的话&#xff0c;为了保持Sceneform-EQR始终是采用最新的filament&#xff0c;每隔一段时间我都会编译filament&#xff0c;并根据新增内容完善Sceneform-EQR。 现由于更换电脑&#xff0c;环境需重新配置。简单记录下编译出错和解决方式。 Sceneform-EQR 是EQ对谷歌“…

ARM 单片机定义变量绝对地址方法

在ARM单片机中&#xff0c;定义变量到绝对地址通常有以下几种方法&#xff08;以Keil MDK为例&#xff0c;其他工具链原理类似&#xff09;&#xff1a; 方法1&#xff1a;使用指针强制转换&#xff08;通用&#xff09; 直接通过指针访问指定地址&#xff1a; define REGIS…

为何AI推理正推动云计算从集中式向分布式转型

作者简介&#xff1a;Vineeth Varughese是Akamai亚太及日本地区的云产品市场负责人&#xff0c;在云计算、人工智能&#xff08;AI&#xff09;及市场进入策略&#xff08;GTM&#xff09;领域拥有丰富经验。 传统云平台在利用海量数据训练AI模型方面表现出色&#xff0c;但随着…

ar 导航导览技术如何实现的?室内外融合定位与ar渲染技术深度解析

本文面向&#xff1a;移动开发工程师、AR技术研究者、室内外导航系统产品经理&#xff0c;旨在提供核心问题的参考方案&#xff1a;如何实现室内外无缝切换的精准定位&#xff08;GPS蓝牙Beacon&#xff09;虚拟导航路径与实景画面的实时叠加原理。 如需获取ar导航导航技术解决…

电路问题处理:SGMII链路中的AC耦合电容摆放位置

SGMII链路中的AC耦合电容摆放位置 目前是有个板子&#xff0c;其上分别有fpga&#xff0c;fpga的gtx口出sgmii千兆以太网链路&#xff0c;通过高速连接器互联&#xff0c; 通常高速差分链路的AC耦合电容放在靠近接收端位置&#xff0c;如果在同一个板内的话没啥疑惑的直接靠近…

激光雷达 + 视觉相机:高精度位姿测量方案详解

激光雷达 视觉相机&#xff1a;高精度位姿测量方案详解 引言 在航天器交会对接、自动驾驶、机器人导航等领域&#xff0c;位姿&#xff08;位置姿态&#xff09;测量的精度和鲁棒性至关重要。单一的传感器&#xff08;如激光雷达或视觉相机&#xff09;往往难以满足复杂场景的…

【整数递增加法拆分】2022-4-11

缘由整数拆分问题&#xff0c;但是怎么输出这个数位最多。-编程语言-CSDN问答 void 整数递增加法拆分() {//缘由https://ask.csdn.net/questions/7687667?spm1005.2025.3001.5141int n 0, c 1, f c, t n;string sc "";cin >> n; t n;while (t){if (t &…

Hashcat使用教程:快速上手密码恢复工具

在信息安全领域&#xff0c;密码破解是不可或缺的一环。而 Hashcat&#xff0c;作为当前最强大的密码恢复工具之一&#xff0c;因其高效的性能与灵活的配置广受好评。本文将介绍 Hashcat 的基础用法&#xff0c;帮助新手快速上手&#xff0c;同时遵守合法使用的基本原则。 一、…

萌系盲盒陷维权风暴,Dreams委托David律所已立案,速避雷

美国律所David代理Dreams USA, Inc.发起全新维权案件&#xff0c;维权矛头指向旗下三大萌系盲盒品牌&#xff1a;Sonny Angel、SMISKI和HIPPERS&#xff0c;跨境卖家需提高警惕。 案件基本情况&#xff1a; 起诉时间&#xff1a;2025-6-9 案件号&#xff1a;2025-cv-06422 …

aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(三)

使用 afl-cc 这是 afl-fuzz 的辅助应用程序。它可以作为 gcc 和 clang 的直接替代品&#xff0c;让您使用所需的运行时工具重新编译第三方代码。 1. -help 显示可用选项 afl-cc -help 其他选项同上&#xff0c;这里不再展开叙述。 afl-clang 1. --help 显示可用选项 a…

安卓开发常用框架与库详解

安卓开发常用框架与库详解 安卓应用开发过程中&#xff0c;选择合适的开发框架和第三方库&#xff0c;可以极大提升开发效率、应用性能和代码的可维护性。本文对主流的安卓开发框架和库进行系统梳理&#xff0c;按功能模块分类&#xff0c;涵盖UI开发、网络请求、图片加载、数…

【项目实训#09】智能代码文件助手模式前后端设计与实现

【项目实训#09】智能代码文件助手模式前后端设计与实现 文章目录 【项目实训#09】智能代码文件助手模式前后端设计与实现一、背景简介二、技术方案与架构设计2.1 整体架构2.2 前端技术选型2.3 后端技术选型 三、前端代码替换服务实现3.1 代码替换服务设计3.2 处理生成的代码3.3…

JAVA-springboot 异常处理

SpringBoot从入门到精通-第10章 异常处理 一、异常简介 传统的Java程序都是由try-catch语句捕捉异常&#xff0c;而Spring Boot项目采用了全局异常类的概念------所有方法均将异常抛出&#xff0c;并且专门安排一个类统一拦截并处理这些异常。这样做的好处是可以把异常处理的…

VIC-3D应用指南系列之:DIC数字图像相关技术与热成像(VIC-3D IR System助力热载荷测试)

本篇文章详细讲述了利用VIC-3D 10将数字图像相关DIC数据与红外相机热成像的温度数据相结合的操作流程。核心步骤包括&#xff1a; 相机选型与系统搭建 测试环境配置 VIC-Snap参数设置 双系统标定&#xff08;DIC与红外&#xff09; 外部参数计算 测试图像采集 红外…

adoc(asciidoc)转为markdown的方法,把.adoc文件转换为markdown格式

要将.adoc文件转换为markdown格式&#xff0c;可以按照以下步骤操作&#xff1a; 安装必要工具&#xff1a; sudo apt install pandoc asciidoc转换流程&#xff1a; 先将asciidoc转换为docbook格式&#xff1a; asciidoc -b docbook foo.adoc然后将docbook转换为markdown&…

2022mpsPTE岗位笔试题

2022年9月完成了PTE岗位的笔试&#xff0c;并通过了。浅浅的还有一点印象&#xff0c;之前有朋友也想来&#xff0c;就放在这里&#xff0c;供需要的朋友看。 前两个题是关于C语言的。 语言不限&#xff0c;C也可。 一个是输出2到100偶数之和&#xff0c;主要就是调用for循环。…