Eureka 服務注冊與發現原理和使用

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循環。…