SpringCloud之Eureka基礎認識-服務注冊中心

0、認識Eureka

Eureka 是 Netflix 開源的服務發現組件,后來被集成到 Spring Cloud 生態中,成為 Spring Cloud Netflix 的核心模塊之一。它主要用于解決分布式系統中??服務注冊與發現??的問題。

  1. Eureka Server 有必要的話,也可以做成集群

  2. Eureka 包含兩個組件∶Eureka ServerEureka Client(服務提供端(Provider)??和??服務消費端(Consumer)

  3. Eureka Server 提供注冊服務, 各個微服務節點通過配置啟動后,會在 Eureka Server 中進行注冊,這樣 EurekaServer 中的服務注冊表中將會存儲所有可用服務節點的信息,服務節點的信息可以在界面中直觀看到。

  4. EurekaClient 通過注冊中心進行訪問, 是一個 Java 客戶端,用于簡化 Eureka Server 的交互,客戶端同時也具備一個內置的、使用輪詢(round-robin) 負載算法的負載均衡器。在應 用啟動后,將會向 Eureka Server 發送心跳(默認周期為 30 秒)。如果 Eureka Server 在多個心跳周期內沒有接收到某個節點的心跳,EurekaServer 將會從服務注冊表中把這個服務節點移除(默認 90 秒)

1、如何創建Eureka

?1.建議單獨的創建一個模塊,然后配置yaml文件

server:port: 9001#配置eureka-server
eureka:instance:hostname: eureka9001.com #服務實例名client:#配置不向注冊中心注冊自己register-with-eureka: false#表示自己就是注冊中心,作用就是維護注冊服務實例, 不需要去檢索服務fetch-registry: falseservice-url:#設置與eureka server 交互模塊, 查詢服務和注冊服務都需要依賴這個地址#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/#相互注冊,這里應該注冊到eureka server9002defaultZone: http://eureka9002.com:9002/eureka/
#  server:
#    #禁用自我保護模式
#    enable-self-preservation: false
#    #設置超時時間為2秒,在2秒鐘,收不到心跳包,就認為是超時
#    eviction-interval-timer-in-ms: 2000

第二步再啟動代碼中加入注解,@EnableEurekaServer 表示該程序作為 EurekaServer

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication9001 {public static void main(String[] args) {SpringApplication.run(EurekaApplication9001.class, args);}
}

當然,必不可少的pom依賴

<dependencies><!--引入eureka-server 場景啟動器starter: 使用版本仲裁--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
</dependencies>

完成后可以訪問http://localhost:9001查看儀表盤

2、將服務提供端和服務消費端作為Eureka Client注冊到Eureka Server

老規矩引入依賴,消費端和提供端都要

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

修改Client的yaml文件和啟動類

provider:

#配置eureka-client
eureka:client:register-with-eureka: true #將自己注冊到Eureka-Server#表示從Eureka-Server 抓取注冊信息#如果是單節點,是可以不配置的,但是如果是一個集群,則必須配置true,#才能配合Ribbon使用負載均衡fetch-registry: trueservice-url:#表示將自己注冊到哪個eureka-server#將本微服務注冊到多個eureka-server ,使用逗號間隔即可defaultZone: http://eureka9001.com:9001/eureka,http://eureka9002.com:9002/eureka
#  instance:
#    #客戶端向服務端發送心跳的時間間隔 1s(默認是30)
#    lease-renewal-interval-in-seconds: 1
#    #服務端收到最后一次心跳后等待的時間上限
#    #時間單位(秒),默認是90s, 超時將剔除服務
#    lease-expiration-duration-in-seconds: 2

?@EnableEurekaClient 將程序標識為eureka client

@EnableEurekaClient
@SpringBootApplication
public class MemberApplication10000 {public static void main(String[] args) {SpringApplication.run(MemberApplication10000.class, args);}
}

consume:

#配置eureka-client
eureka:client:register-with-eureka: true #將自己注冊到Eureka-Serverfetch-registry: trueservice-url:#表示將自己注冊到哪個eureka-server#這里我們將本微服務注冊到EurekaServer 集群,使用逗號間隔#defaultZone: http://localhost:9001/eurekadefaultZone: http://eureka9001.com:9001/eureka,http://eureka9002.com:9002/eureka

@EnableEurekaClient 將程序標識為eureka client

@EnableEurekaClient
@SpringBootApplication
public class MemberConsumerApplication {public static void main(String[] args) {SpringApplication.run(MemberConsumerApplication.class,args);}
}

啟動之后可以訪問http://localhost:9001查看,昵稱是yaml文件中的昵稱?

3.Service Consumer Service Provider EurekaServer 的維護機制

三者的協同流程??

  1. ??服務注冊??:
    Provider(MEMBER-SERVICE:10000)啟動 → 向 Eureka Server(9001)注冊
  2. ??服務發現??:
    Consumer(80端口應用)需要調用服務時 → 從 Server 獲取 Provider 地址
  3. ??服務調用??:
    Consumer 通過 HTTP Client(如RestTemplate/Feign)訪問 Provider
  4. ??狀態維護??:
    • Provider 持續發送心跳
    • Server 定時清理失效實例
    • Consumer 定期更新服務列表

Eureka Server(注冊中心)??

  • ??核心職責??
    • 維護所有服務的注冊信息(服務名 → 調用地址的映射)
    • 提供服務的注冊、發現、續約和剔除功能
  • ??關鍵機制??
    • ??服務注冊表??:存儲服務提供者的元數據(IP、端口、健康狀態等)
    • ??心跳機制??:通過 Provider 的定期心跳(默認30秒)判斷服務存活,超時(默認90秒)自動剔除失效實例
    • ??自我保護模式??:當超過85%實例心跳丟失時,暫停剔除操作,防止網絡分區導致誤刪
    • ?定期清理任務??:默認每60秒檢查并清理過期實例

Service Provider(服務提供方)??

  • ??核心職責??
    • 向 Eureka Server 注冊自身服務信息
    • 維持服務的可用狀態
  • ??關鍵機制??
    • ??啟動注冊??:啟動時提交注冊請求(包含服務名、IP、端口等),詳情參考yaml文件

?Service Consumer(服務消費方)??

  • ??核心職責??
    • 從 Eureka Server 獲取服務提供者地址
    • 發起遠程調用(如HTTP/RPC)
  • ??關鍵機制??
    • ??服務發現??:
      • 通過服務別名在?Eureka Server 查詢獲取真實調用地址,獲取實際的RPC(Remote Procedure Call? 遠程過程調用)遠程地址,實際上是HttpClient技術實現(通過RestTemplate實現的“RPC”本質是??HTTP REST調用??,底層依賴HTTPClient)
      • 默認每30秒更新一次遠程調用地址,提高分布式系統可用性
    • ??本地緩存??:將服務地址緩存到JVM內存,避免每次調用都訪問 Server,直接去訪問provider端
    • ??負載均衡??:結合Ribbon等組件從多個Provider實例中選擇一個(如輪詢、權重)
    • ??故障恢復??:調用失敗時自動重試或切換其他實例

?4.自我保護模式

  • 默認情況下EurekaClient定時向EurekaServer端發送心跳包
  • 如果Eureka在server端在一定時間內(默認90秒)沒有收到EurekaClient發送心跳包,便會直接從服務冊列表中剔除該服務
  • 如果Eureka 開啟了自我保護模式/機制, 那么在短時間(90秒中)內丟失了大量的服務實例心跳,這時候EurekaServer會開啟自我保護機制,不會剔除該服務(該現象可能出現在如果網絡不通或者阻塞) 因為客戶端還能正常發送心跳,只是網絡延遲問題,而保護機制是為了解決此問題而產生的
  1. 自我保護是 屬于 CAP 里面的 AP 分支, 保證高可用和分區容錯性
  2. 自我保護模式是—種應對網絡異常的安全保護措施。它的架構哲學是寧可同時保留所有微服務(健康的微服務和不健康的微服務都會保留)也不盲目注銷任何健康的微服務(容忍你一段時間不心跳) 。 使 用 自 我 保 護 模 式 , 可 以 讓 Eureka 集 群 更 加 的 健 壯 、 穩 定 。 參 考 :https://blog.csdn.net/wangliangluang/article/details/120626014

在Eureka Server的yaml文件中添加

  server:#禁用自我保護模式enable-self-preservation: false #默認是true#設置超時時間為2秒,在2秒鐘,收不到心跳包,就認為是超時eviction-interval-timer-in-ms: 2000

provider:

eureka:instance:#客戶端向服務端發送心跳的時間間隔 1s(默認是30)lease-renewal-interval-in-seconds: 1#服務端收到最后一次心跳后等待的時間上限#時間單位(秒),默認是90s, 超時將剔除服務lease-expiration-duration-in-seconds: 3

解釋一下:設置這個eviction-interval-timer-in-ms: 2000和設置lease-expiration-duration-in-seconds: 3 的意思就是等待3秒,如果3秒沒有發送心跳就標記為超時,與此同時,Eureka server端每隔兩秒就在刪除超時的服務?

出現紅字,代表自我保護機制已經出現了?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80730.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80730.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80730.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【氮化鎵】電子輻照下溫度對GaN位移閾能的影響

2024年,華東師范大學的彭勝國等人基于從頭算分子動力學(AIMD)方法,研究了低能電子束輻照下溫度對氮化鎵(GaN)位移閾能(TDE)的影響。實驗結果表明,在初始動能40至80 eV的范圍內,鎵(Ga)和氮(N)原子作為初級擊出原子(PKAs)引發的位移對溫度呈現不同的敏感性:Ga 的…

Java 中的數據類型誤導點!!!

在 Java 中&#xff0c;數據類型分為兩大類&#xff1a;基本類型&#xff08;Primitive Types&#xff09; 和 引用類型&#xff08;Reference Types&#xff09;。它們的存儲方式和行為完全不同。 1. 基本類型 Java 有 8 種基本數據類型&#xff0c;它們直接存儲值&#xff…

二次封裝 el-dialog 組件:打造更靈活的對話框解決方案

文章目錄 引言為什么需要二次封裝&#xff1f;封裝思路代碼實現1. 基礎封裝組件 (Dialog.vue)2. Vue中引入使用示例 封裝后的優勢進階優化建議 總結 引言 在 Vue 項目中&#xff0c;Element UI 的 el-dialog 是一個非常實用的對話框組件。但在實際開發中&#xff0c;我們經常會…

框架篇八股(自用)

框架篇 Spring框架中的bean不是線程安全的 Scope&#xff08;&#xff09; singleton單例 prototype多例 一個類中有可修改的成員變量需要考慮線程安全 bean沒有可變狀態&#xff08;service類&#xff0c;DAO類&#xff09; 某種程度單例bean是線程安全的 AOP面向切面編程…

Go語言安裝proto并且使用gRPC服務(2025最新WINDOWS系統)

1.protobuf簡介 protobuf 即 Protocol Buffers&#xff0c;是一種輕便高效的結構化數據存儲格式&#xff0c;與語言、平臺無關&#xff0c;可擴展可序列化。protobuf 性能和效率大幅度優于 JSON、XML 等其他的結構化數據格式。protobuf 是以二進制方式存儲的&#xff0c;占用空…

rust-candle學習筆記11-實現一個簡單的自注意力

參考&#xff1a;about-pytorch 定義ScaledDotProductAttention結構體&#xff1a; use candle_core::{Result, Device, Tensor}; use candle_nn::{Linear, Module, linear_no_bias, VarMap, VarBuilder, ops};struct ScaledDotProductAttention {wq: Linear,wk: Linear,wv: …

spark MySQL數據庫配置

Spark 連接 MySQL 數據庫的配置 要讓 Spark 與 MySQL 數據庫實現連接&#xff0c;需要進行以下配置步驟。下面為你提供詳細的操作指南和示例代碼&#xff1a; 1. 添加 MySQL JDBC 驅動依賴 你得把 MySQL 的 JDBC 驅動添加到 Spark 的類路徑中。可以通過以下兩種方式來完成&a…

web 自動化之 KDT 關鍵字驅動詳解

一、什么是關鍵字驅動&#xff1f; 1、什么是關鍵字驅動&#xff1f;&#xff08;以關鍵字函數驅動測試&#xff09; 關鍵字驅動又叫動作字驅動&#xff0c;把項目業務封裝成關鍵字函數&#xff0c;再基于關鍵字函數實現自動化測試 2、關鍵字驅動測試原理 關鍵字驅動測試是一…

Java使用POI+反射靈活的控制字段導出Excel

前端傳入哪些字段&#xff0c;后端就導出哪些到Excel表格中&#xff0c;具體代碼實現如下 controller /*** 用戶導出* param dto*/PostMapping("/exportUser")public void exportCharterOrder(RequestBody UserExportDTO dto){userService.exportUser(dto);} serv…

Qt/C++面試【速通筆記八】—Qt的事件處理機制

在Qt中&#xff0c;事件處理機制是應用程序與用戶或系統交互的核心。通過事件處理&#xff0c;Qt能夠響應用戶的輸入、窗口的變化、定時器的觸發等各種情況。 1. 事件循環&#xff08;Event Loop&#xff09; 在Qt應用程序中&#xff0c;事件循環是事件處理機制的基礎。事件循…

TTL (Time-To-Live) 解析

文章目錄 TTL (Time-To-Live) 解析&#xff1a;網絡與Java中的應用一、TTL的定義二、TTL在網絡中的應用1. **路由和數據包的生命周期**2. **DNS中的TTL**3. **防止環路** 三、TTL在Java中的應用1. **緩存管理**2. **Java中的ThreadLocal**3. **網絡通信中的TTL** 四、TTL的注意…

HDFS的客戶端操作(2)文件上傳

我們向/maven下上傳一個文件。 要用到的api是put (或者copyFormLocalFile&#xff09;。核心代碼如下。 public void testCopyFromLocalFile() throws IOException, InterruptedException, URISyntaxException {// 1 獲取文件系統Configuration configuration new Configurati…

光譜相機的光電信號轉換

光譜相機的光電信號轉換是將分光后的光學信息轉化為可處理的數字信號的核心環節&#xff0c;具體分為以下關鍵步驟&#xff1a; 一、分光后光信號接收與光電轉換 ?分光元件作用? 光柵/棱鏡/濾光片等分光元件將入射光分解為不同波長單色光&#xff0c;投射至探測器陣列表面…

網絡協議分析 實驗二 IP分片與IPv6

文章目錄 索引及重要內容實驗2 IP 高級實驗實驗2.1 IPv4協議分片實驗實驗2.2 IPV6協議實驗2.3 ARP初級 索引及重要內容 實驗2 IP 高級實驗 實驗2.1 IPv4協議分片實驗 icmp的不可達報文 實驗2.2 IPV6協議 實驗2.3 ARP初級 arp –a 查看ARP緩存表內容 arp –s IP地址(格式&…

20、map和set、unordered_map、un_ordered_set的復現

一、map 1、了解 map的使用和常考面試題等等&#xff0c;看這篇文章 map的key是有序的 &#xff0c;值不可重復 。插入使用 insert的效率更高&#xff0c;而在"更新map的鍵值對時&#xff0c;使用 [ ]運算符效率更高 。" 注意 map 的lower和upper那2個函數&#x…

基于 Amazon Bedrock 和 Amazon Connect 打造智能客服自助服務 – 設計篇

隨著 GenAI 技術不斷的發展和演進&#xff0c;人工智能技術廣泛地被應用在呼叫中心服務領域&#xff0c;主要包括虛擬坐席&#xff08;即自助服務&#xff09;、坐席助手和呼叫中心運營的數據洞察和智能分析。本博客主要針對自助服務應用場景的實現。 1. 傳統自助服務系統瓶頸 …

java高效實現爬蟲

一、前言 在Web爬蟲技術中&#xff0c;Selenium作為一款強大的瀏覽器自動化工具&#xff0c;能夠模擬真實用戶操作&#xff0c;有效應對JavaScript渲染、Ajax加載等復雜場景。而集成代理服務則能夠解決IP限制、地域訪問限制等問題。本文將詳細介紹如何利用JavaSelenium快代理實…

【計算機視覺】OpenCV實戰項目:基于OpenCV的車牌識別系統深度解析

基于OpenCV的車牌識別系統深度解析 1. 項目概述2. 技術原理與算法設計2.1 圖像預處理1) 自適應光照補償2) 邊緣增強 2.2 車牌定位1) 顏色空間篩選2) 形態學操作3) 輪廓分析 2.3 字符分割1) 投影分析2) 連通域篩選 2.4 字符識別 3. 實戰部署指南3.1 環境配置3.2 項目代碼解析 4.…

Python核心數據類型全解析:字符串、列表、元組、字典與集合

導讀&#xff1a; Python 是一門功能強大且靈活的編程語言&#xff0c;而其核心數據類型是構建高效程序的基礎。本文深入剖析了 Python 的五大核心數據類型——字符串、列表、元組、字典和集合&#xff0c;結合實際應用場景與最佳實踐&#xff0c;幫助讀者全面掌握這些數據類型…

GPT-4.1和GPT-4.1-mini系列模型支持微調功能,助力企業級智能應用深度契合業務需求

微軟繼不久前發布GPT-4.1系列模型后&#xff0c;Azure OpenAI服務&#xff08;國際版&#xff09;現已正式開放對GPT-4.1和GPT-4.1-mini的微調功能&#xff0c;并通過Azure AI Foundry&#xff08;國際版&#xff09;提供完整的部署和管理解決方案。這一重大升級標志著企業級AI…