【微服務】Spring Cloud中如何使用Eureka

文章目錄

      • 強烈推薦
      • 引言
      • 主要功能
      • Eureka 的架構
      • 使用示例
        • Eureka Server 配置
        • Eureka Client 配置
        • 示例服務
        • 服務發現調用示例
      • Spring Cloud如何實現服務的注冊?
        • 1. 搭建 Eureka 服務注冊中心
        • 2. 配置服務注冊到 Eureka
        • 3. 驗證服務注冊
      • 總結
      • 應用場景
        • 1. 動態服務發現
        • 2. 負載均衡
        • 3. 服務治理
        • 4. 服務調用
        • 5. 灰度發布和藍綠部署
        • 6. 多數據中心支持
      • 強烈推薦
      • 專欄集錦
      • 寫在最后

579a429daf314744b995f37351b46548

強烈推薦

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站:人工智能

b004071ozy_05_amzn


引言

Eureka 是 Netflix 開源的一個服務發現組件,它在微服務架構中扮演著重要的角色。

Eureka 主要分為 Eureka Server 和 Eureka Client 兩部分。

Eureka Server 作為服務注冊中心,維護所有可用服務實例的信息。Eureka Client 作為服務提供者或消費者,負責向 Eureka Server 注冊服務和獲取其他服務的位置信息。


主要功能

  1. 服務注冊

    服務提供者在啟動時,會將自己的信息(如 IP 地址、端口、服務名稱等)注冊到 Eureka Server 上。

  2. 服務發現

    服務消費者從 Eureka Server 獲取可用服務實例列表,并根據負載均衡策略調用具體的服務實例。

  3. 故障檢測

    Eureka 定期發送心跳檢測服務實例的健康狀況。如果某個服務實例未能按時響應心跳,Eureka 會將其標記為不可用。

  4. 動態擴展

    Eureka 支持動態擴展和縮減服務實例。當服務實例上線或下線時,Eureka Server 會自動更新服務實例列表。


Eureka 的架構

  • Eureka Server

    服務注冊中心,維護所有服務實例的信息。

  • Eureka Client

    服務提供者或消費者,負責注冊服務和發現服務。


使用示例

Eureka Server 配置

首先,創建一個 Spring Boot 應用并添加以下依賴:

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

然后,在應用主類中添加 @EnableEurekaServer 注解:

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

最后,在 application.yml 中進行配置:

server:port: 8761eureka:client:register-with-eureka: falsefetch-registry: false
Eureka Client 配置

創建一個服務提供者或消費者應用,添加以下依賴:

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

在應用主類中添加 @EnableEurekaClient 注解:

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

application.yml 中進行配置:

server:port: 8080eureka:client:service-url:defaultZone: http://localhost:8761/eureka/
示例服務
@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello from Eureka Client!";}
}
服務發現調用示例

使用 Feign 和 Ribbon 從 Eureka 注冊中心獲取服務實例并進行調用:

@FeignClient(name = "eureka-client")
public interface HelloClient {@GetMapping("/hello")String hello();
}@RestController
public class HelloController {@Autowiredprivate HelloClient helloClient;@GetMapping("/call")public String call() {return helloClient.hello();}
}

通過上述配置和代碼示例,Eureka Server 維護所有服務實例的信息,Eureka Client 可以從 Eureka Server 獲取服務實例列表,并通過 Feign 和 Ribbon 進行負載均衡和服務調用。

這種方式在微服務架構中極大地簡化了服務注冊與發現的過程,提高了系統的擴展性和容錯能力。


Spring Cloud如何實現服務的注冊?

Spring Cloud 通過服務注冊中心(Service Registry)實現服務的注冊和發現。Eureka 是 Spring Cloud Netflix 提供的一個常見的服務注冊和發現組件。以下是使用 Spring Cloud 和 Eureka 實現服務注冊的基本步驟:

1. 搭建 Eureka 服務注冊中心

首先,需要創建一個 Eureka 服務注冊中心。

步驟:

  1. 創建一個新的 Spring Boot 項目,并添加以下依賴項:

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
  2. application.propertiesapplication.yml 中配置 Eureka 服務器:

    server:port: 8761eureka:client:register-with-eureka: falsefetch-registry: false
    
  3. 在主應用類中添加 @EnableEurekaServer 注解:

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
    }
    
2. 配置服務注冊到 Eureka

接下來,需要配置客戶端服務將自己注冊到 Eureka 服務注冊中心。

步驟:

  1. 創建一個新的 Spring Boot 項目,并添加以下依賴項:

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
  2. application.propertiesapplication.yml 中配置 Eureka 客戶端:

    eureka:client:service-url:defaultZone: http://localhost:8761/eureka/
    spring:application:name: my-service
    
  3. 在主應用類中添加 @EnableEurekaClient 注解:

    @SpringBootApplication
    @EnableEurekaClient
    public class MyServiceApplication {public static void main(String[] args) {SpringApplication.run(MyServiceApplication.class, args);}
    }
    
3. 驗證服務注冊

啟動 Eureka 服務注冊中心和服務客戶端,訪問 http://localhost:8761 可以看到注冊到 Eureka 服務注冊中心的服務列表。

總結

通過以上步驟,我們使用 Spring Cloud 和 Eureka 實現了基本的服務注冊和發現機制。

Eureka 服務注冊中心負責管理和協調服務的注冊與發現,而各個微服務通過 Eureka 客戶端與注冊中心進行交互,實現服務的動態注冊和發現。


應用場景

Spring Cloud 和 Eureka 的服務注冊和發現機制在微服務架構中有廣泛的應用場景,以下是一些典型的應用場景:

image-20240710003016350
1. 動態服務發現

在微服務架構中,各個服務實例可能會動態地加入和退出。Eureka 允許服務自動注冊和注銷,使得客戶端可以動態地發現和調用可用的服務實例。

應用場景:

  • 微服務自動擴展:在高峰期自動增加服務實例,在低谷期自動減少實例。

  • 服務自愈:當某個服務實例故障時,Eureka 可以自動從服務注冊列表中移除該實例,并通過健康檢查確保其他實例的正常運行。

2. 負載均衡

Eureka 可以與負載均衡器(如 Spring Cloud Ribbon)結合使用,客戶端可以從注冊中心獲取可用服務實例列表,然后進行負載均衡調用。

應用場景:

  • 流量分配:將流量均勻分配到多個服務實例,避免單個實例過載。

  • 故障轉移:當某個實例不可用時,自動切換到其他可用實例。

3. 服務治理

通過 Eureka,微服務架構中的各個服務可以進行統一的管理和監控,簡化了服務的部署和維護。

應用場景:

  • 服務監控:實時監控服務的健康狀態和可用性。

  • 配置管理:通過配置中心(如 Spring Cloud Config)進行集中化配置管理,動態更新服務配置。

4. 服務調用

Eureka 與客戶端負載均衡器(如 Ribbon)和聲明式 HTTP 客戶端(如 Feign)結合,簡化了服務之間的調用。

應用場景:

  • 簡化調用:使用 Feign 客戶端通過接口調用遠程服務,無需手動編寫 HTTP 請求。

  • 動態路由:根據 Eureka 的注冊信息動態選擇調用目標,避免硬編碼服務地址。

5. 灰度發布和藍綠部署

Eureka 可以幫助實現灰度發布和藍綠部署,通過注冊不同版本的服務實例,實現流量的分級和分段管理。

應用場景:

  • 灰度發布:逐步將新版本服務發布給一部分用戶進行測試,確保穩定后再全量發布。

  • 藍綠部署:在不影響現有服務的情況下,部署新版本服務進行切換,確保發布的平滑過渡。

6. 多數據中心支持

Eureka 支持多數據中心的服務注冊和發現,可以跨數據中心進行服務調用,提升系統的容災和高可用性。

應用場景:

  • 跨數據中心調用:實現不同數據中心之間的服務互通,提高系統的容災能力。
  • 全局負載均衡:在全球范圍內分配流量,提高系統的響應速度和穩定性。

通過上述應用場景,可以看出 Spring Cloud 和 Eureka 在微服務架構中發揮了重要作用,極大地提高了系統的靈活性、可擴展性和高可用性。


強烈推薦

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站:人工智能

b004071ozy_05_amzn


專欄集錦

大佬們可以收藏以備不時之需:

Spring Boot 專欄:http://t.csdnimg.cn/peKde

ChatGPT 專欄:http://t.csdnimg.cn/cU0na

Java 專欄:http://t.csdnimg.cn/YUz5e

Go 專欄:http://t.csdnimg.cn/Jfryo

Netty 專欄:http://t.csdnimg.cn/0Mp1H

Redis 專欄:http://t.csdnimg.cn/JuTue

Mysql 專欄:http://t.csdnimg.cn/p1zU9

架構之路 專欄:http://t.csdnimg.cn/bXAPS


寫在最后

感謝您的支持和鼓勵! 😊🙏

如果大家對相關文章感興趣,可以關注公眾號"架構殿堂",會持續更新AIGC,java基礎面試題, netty, spring boot, spring cloud等系列文章,一系列干貨隨時送達!

如果有項目或者畢設合作,請V:fengyelin8866,備注畢設

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

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

相關文章

Android C++系列:Linux進程間關系

1. 終端 在UNIX系統中,用戶通過終端登錄系統后得到一個Shell進程,這個終端成為Shell進 程的控制終端(Controlling Terminal),在前面文章我們說過,控制終端是保存在PCB中的信 息,而我們知道fork會復制PCB中的信息,因此由Shell進程啟動的其它進程的控制終端也是 這個終端。…

OpenCV進行視頻分析(光流、目標跟蹤)----20240710

一、OpenCV進行光流分析 # 光流分析螞蟻軌跡 import numpy as np import cv2if __name__ == __main__:cap = cv2.VideoCapture(./pictures/ant.mp4)# ShiTomasi 角點檢測參數feature_params = dict(maxCorners=100

基于Java中的SSM框架實現水稻朔源信息系統項目【項目源碼】

基于Java中的SSM框架實現水稻朔源信息系統演示 SSM框架 SSM框架是基于Spring、SpringMVC以及Mybatis實現的針對JAVA WEB端應用的開發框架&#xff0c;通過SSM框架結構可以實現以上三種框架的優點集合&#xff0c;從而實現更加高效便捷的系統開發和呈現。該框架結構通過Spring框…

PolarisMesh源碼系列——服務如何注冊

前話 PolarisMesh&#xff08;北極星&#xff09;是騰訊開源的服務治理平臺&#xff0c;致力于解決分布式和微服務架構中的服務管理、流量管理、配置管理、故障容錯和可觀測性問題&#xff0c;針對不同的技術棧和環境提供服務治理的標準方案和最佳實踐。 PolarisMesh 官網&am…

main.cpp程序執行流程圖

當然&#xff0c;我會為你繪制一個程序執行流程圖&#xff0c;并用中文注釋來解釋 main.cpp 的代碼邏輯思想和執行流程。 程序執行流程圖 開始|V 初始化|V 打開攝像頭 (VideoCapture cap(0))|V 進入主循環 (while (true))|V 捕獲圖像 (cap >> srcImage)|V 圖像是否為空…

280個地級市金融集聚水平數據(2006-2022年)

2006年-2022年280個地級市金融集聚水平數據整理資源-CSDN文庫 金融集聚水平&#xff1a;衡量地級市金融發展的新維度 金融集聚水平是衡量一個地區金融發展程度的重要指標&#xff0c;它反映了金融機構、金融資源、金融服務在特定時間和空間的集中程度。這一指標的評估可以從多…

根據H在有限域GF(2^m)上求解生成矩陣G

原理 有時間再補充。 注1&#xff1a;使用高斯消去法。如果Py不為單位陣&#xff0c;則說明進行了列置換&#xff0c;此時G不是系統形式。 注2&#xff1a;校驗矩陣H必須是行滿秩才存在對應的生成矩陣G&#xff0c;且生成矩陣G通常不唯一。 matlab實現&#xff1a;只做列置…

視語坤川大模型智能體平臺亮相2024世界人工智能大會

7月4日-7月7日&#xff0c;以“以共商促共享以善治促善智”為主題的2024世界人工智能大會&#xff08;WAIC 2024&#xff09;在上海舉辦&#xff0c;世界頂級專家學者、知名企業代表、政界人士、高校組織等齊聚上海&#xff0c;共商發展、共話未來。 作為大會的重磅環節——昇…

Python面試題:編寫一個 Python 腳本來讀取 Excel 文件

要在 Python 中讀取 Excel 文件&#xff0c;可以使用 pandas 庫&#xff0c;這個庫提供了強大的數據處理和分析功能&#xff0c;并且支持讀取 Excel 文件。你還需要 openpyxl 庫來支持讀取 .xlsx 格式的 Excel 文件。以下是如何編寫一個腳本來讀取 Excel 文件的示例&#xff1a…

git 的cherry-pick選擇性提交

git cherry-pick 是 Git 中的一個非常有用的命令&#xff0c;它允許你將一個或多個特定的提交&#xff08;commit&#xff09;從一個分支應用到另一個分支上&#xff0c;而不是合并整個分支。 單個提交的 cherry-pick 假設你有一個 feature 分支&#xff0c;其中有一個提交&a…

【筆記】Android V 應用SDK升級適配和問題

說明 隨著Google釋放的Android版本,系統升級SDK到35,應用也需要升級上去,不然會報錯。 Android Studio Jellyfish | 2023.3.1 | Android Developers Android Studio 預覽版中的新功能 | Android Developers 當前版本的Android Studio

Elasticsearch:深度學習與機器學習:了解差異

作者&#xff1a;來自 Elastic Elastic Platform Team 近年來&#xff0c;兩項突破性技術一直站在創新的最前沿 —— 機器學習 (machine learning - ML) 和深度學習 (deep learning - DL)。人工智能 (AI) 的這些子集遠不止是流行語。它們是推動醫療保健、金融等各行業進步的關鍵…

Java面試八股之MySQL索引B+樹、全文索引、哈希索引

MySQL索引B樹、全文索引、哈希索引 注意&#xff1a;B樹中B不是代表二叉樹&#xff08;binary&#xff09;&#xff0c;而是代表平衡&#xff08;balance&#xff09;&#xff0c;因為B樹是從最早的平衡二叉樹演化而來&#xff0c;但是B樹不是一個二叉樹。 B樹的高度一般在2~…

es是如何處理索引數據的變動的?

1 概述 es是如何處理索引數據的變動的&#xff1f; 或者說索引數據變動時&#xff0c;es會執行哪些操作&#xff1f; refresh、fsync、merge 和 flush 操作有何作用&#xff1f; es是如何確保即使es發生宕機數據也不丟失的&#xff1f; 在回答上述問題前&#xff0c;可以先…

文件操作和IO流

前言&#x1f440;~ 上一章我們介紹了多線程進階的相關內容&#xff0c;今天來介紹使用java代碼對文件的一些操作 文件&#xff08;file&#xff09; 文件路徑&#xff08;Path&#xff09; 文件類型 文件操作 文件系統操作&#xff08;File類&#xff09; 文件內容的讀…

leetcode--恢復二叉搜索樹

leetcode地址&#xff1a;恢復二叉搜索樹 給你二叉搜索樹的根節點 root &#xff0c;該樹中的 恰好 兩個節點的值被錯誤地交換。請在不改變其結構的情況下&#xff0c;恢復這棵樹 。 示例 1&#xff1a; 輸入&#xff1a;root [1,3,null,null,2] 輸出&#xff1a;[3,1,null…

AirPods Pro新功能前瞻:iOS 18的五大創新亮點

隨著科技的不斷進步&#xff0c;蘋果公司一直在探索如何通過創新提升用戶體驗。iOS 18的推出&#xff0c;不僅僅是iPhone的一次系統更新&#xff0c;更是蘋果生態鏈中重要一環——AirPods Pro的一次重大升級。 據悉&#xff0c;iOS 18將為AirPods Pro帶來五項新功能&#xff0…

設計模式探索:觀察者模式

1. 觀察者模式 1.1 什么是觀察者模式 觀察者模式用于建立一種對象與對象之間的依賴關系&#xff0c;當一個對象發生改變時將自動通知其他對象&#xff0c;其他對象會相應地作出反應。 在觀察者模式中有如下角色&#xff1a; Subject&#xff08;抽象主題/被觀察者&#xf…

【大模型】大規模部署LLM:挑戰與對策

大規模部署LLM&#xff1a;挑戰與對策 引言一、計算資源的挑戰1.1 計算成本1.2 能源消耗與碳足跡 二、維護與更新的挑戰2.1 模型更新與版本控制2.2 知識時效性 三、數據隱私與倫理考量3.1 數據隱私保護3.2 倫理與偏見 四、可擴展性與靈活性4.1 系統架構設計4.2 多語言與地域適應…

詳細分析@FunctionalInterface的基本知識(附Demo)

目錄 前言1. 基本知識2. Demo 前言 Java的基本知識推薦閱讀&#xff1a; java框架 零基礎從入門到精通的學習路線 附開源項目面經等&#xff08;超全&#xff09;Spring框架從入門到學精&#xff08;全&#xff09; 1. 基本知識 FunctionalInterface 是 Java 8 引入的一個注…