Eureka註冊中心

来源:https://www.cnblogs.com/buchizicai/archive/2023/02/05/17093471.html
-Advertisement-
Play Games

Eureka是Netflix開發的服務發現框架,本身是一個基於REST的服務,主要用於定位運行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。Eureka提供了完整的Service Registry和Service Discovery實現實現,也是Spring Cloud體系中最... ...


Eureka註冊中心

Eureka是充當一個分配者的角色。
為每一個服務註冊分類,然後有服務A需要調用服務B的時候,eureka就分配多個服務B中的一個響應給服務A

image

前置知識:提供者和消費者

在服務調用關係中,會有兩個不同的角色:

服務提供者:一次業務中,被其它微服務調用的服務。(提供介面給其它微服務)

服務消費者:一次業務中,調用其它微服務的服務。(調用其它微服務提供的介面)

image

但是,服務提供者與服務消費者的角色並不是絕對的,而是相對於業務而言。服務既可以是服務提供者,也可以是服務消費者

Eureka工作原理和作用

註意:
①一個微服務,既可以是服務提供者,又可以是服務消費者,因此eureka將服務註冊、服務發現等功能統一封裝到eureka-client端

②Eureka和Nacos都有的兩個細節功能:
I、服務消費者需要找userservice名的服務,Euraka就會將以userservice命名的服務埠以列表(緩存列表)的形式返回給消費者,這樣消費者就不需要一直訪問Euraka造成伺服器壓力。但同時為了保證userservice命名的服務有變化時消費者拉取信息的準確性,所以Euraka每30s更新列表並返回給消費者。
II、服務提供者都需要心跳檢測,讓Euraka和Nacos知道該提供者還活著。(Nacos心跳檢測更頻繁)

假如我們的服務提供者user-service部署了多個實例,如圖:

image

大家思考幾個問題:

  • order-service在發起遠程調用的時候,該如何得知user-service實例的ip地址和埠?
  • 有多個user-service實例地址,order-service調用時該如何選擇?
  • order-service如何得知某個user-service實例是否依然健康,是不是已經宕機?

這些問題都需要利用SpringCloud中的註冊中心來解決,其中最廣為人知的註冊中心就是Eureka,其結構如下:

image

問題1:order-service如何得知user-service實例地址?

獲取地址信息的流程如下:

  • user-service服務實例啟動後,將自己的信息註冊到eureka-server(Eureka服務端)。這個叫服務註冊

  • eureka-server保存服務名稱到服務實例地址列表的映射關係

    由於有這個↑的緣故,所以http請求路徑中埠號寫成服務名稱就可以訪問對應的服務

    (由於同一個名的服務有多個埠,最後就由負載均衡決定請求去哪個服務埠)

  • order-service根據服務名稱,拉取實例地址列表。這個叫服務發現或服務拉取

問題2:order-service如何從多個user-service實例中選擇具體的實例?

  • order-service從實例列表中利用負載均衡演算法選中一個實例地址,向該實例地址發起遠程調用

問題3:order-service如何得知某個user-service實例是否依然健康,是不是已經宕機?

  • user-service會每隔一段時間(預設30秒)向eureka-server發起請求,報告自己狀態,稱為心跳
  • 當超過一定時間沒有發送心跳時,eureka-server會認為微服務實例故障,將該實例從服務列表中剔除
  • order-service拉取服務時,就能將故障實例排除了

搭建Eureka

image

三步驟:

image

1. 搭建註冊中心EurekaServer

首先大家註冊中心服務端:eureka-server,這必須是一個獨立的微服務。
(實際是Eureka自己註冊到Eureka中)

1.1引入依賴

引入SpringCloud為eureka提供的starter依賴:

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

1.2配置文件

編寫一個application.yml文件,內容如下:

server:
  port: 10086	#當前服務占用的埠號
spring:
  application:
    name: eureka-server	#eureka服務的服務名稱
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka #eureka的地址信息

1.3啟動類

給eureka-server服務編寫一個啟動類,一定要添加一個@EnableEurekaServer註解,開啟eureka的註冊中心功能:

package cn.itcast.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

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

1.4啟動服務

啟動微服務,然後在瀏覽器訪問:http://127.0.0.1:10086

啟動成功的界面:

image

2. 服務註冊

user-service註冊到eureka-server中去

2.1引入依賴

在user-service的pom文件中,引入下麵的eureka-client依賴:

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

2.2配置文件

在user-service中,修改application.yml文件,添加服務名稱、eureka地址:

server:
  port: 8081 #當前服務占用的埠號
spring:
  application: 
    name: userservice #配置user-service服務的服務名稱
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka #註冊到哪個eureka地址

2.3啟動多個user-service實例

為了演示一個服務有多個實例的場景,我們添加一個SpringBoot的啟動配置,再啟動一個user-service。

首先,複製原來的user-service啟動配置:

image

然後,在彈出的視窗中,填寫信息:

image

現在,SpringBoot視窗會出現兩個user-service啟動配置:

image

不過,第一個是8081埠,第二個是8082埠。

啟動兩個user-service實例:

image

查看eureka-server管理頁面:

image

3. 服務發現

我們將order-service的邏輯修改:向eureka-server拉取user-service的信息,實現服務發現。

3.1 引入依賴

在order-service的pom文件中,引入下麵的eureka-client依賴:

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

3.2 配置文件

在order-service中,修改application.yml文件,添加服務名稱、eureka地址:

server:
  port: 8080 #當前服務占用的埠號
spring:
  application:
    name: orderservice #配置user-service服務的服務名稱
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka #eureka的地址信息

3.3 服務拉取與負責均衡

我們要去eureka-server中拉取user-service服務的實例列表,並且實現負載均衡。

  • 加負責均衡註解
    在order-service的OrderApplication中,給RestTemplate這個Bean添加一個@LoadBalanced註解:

    image

  • 修改訪問服務路徑
    修改order-service服務中的cn.itcast.order.service包下的OrderService類中的queryOrderById方法。修改訪問的url路徑,用服務名代替ip、埠:

    spring會自動幫助我們從eureka-server端,根據userservice這個服務名稱,獲取實例列表,而後完成負載均衡。

    image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ​ ​編輯 列表和元組 list 是一種有序、可變的數據類型,可添加刪除其中的元素。 len()函數:可以獲取列表元素的個數 classmates = ['Micheal' , 'Bob' , 'James'] print(classmates) print(len(classmates)) Ter ...
  • 突發奇想,爬取p站圖片做個壁紙圖庫(bukemiaoshu),當然這裡有許多的門檻,但是為了實現理想,暫時沒想那麼多了,直接開乾(不是專業做測試和自動化的,如有大佬請評論指教!!!) 1.進入登錄頁由於p站是需要登錄的,聽說p站反爬,requests應該不是那麼好使,於是使用selenium模擬人工 ...
  • 這篇文章主要描述分散式系統的發展歷程和分散式系統的衡量指標。發展歷程包括了單機模式、數據並行模式和任務並行模式。分散式系統的衡量指標包括性能、資源占用、可用性和可擴展性。 ...
  • Java JDK1.5: 泛型 新特性的講解說明 每博一文案 聽到過這樣一句話:“三觀沒有標準。在烏鴉的世界里,天鵝也有罪。” 環境、閱歷的不同,造就了每個人獨有的世界觀、人生觀、價值觀。 三觀並無對錯高下,只有同與不同。恰如飛鳥不用和游魚同行,高山不必同流水相逢。 總用自己的尺子去度量別人,無疑是 ...
  • Elasticsearch是位於 Elastic Stack 核心的分散式搜索和分析引擎。Elasticsearch 是索引、搜索和分析魔法發生的地方。lasticsearch 為所有類型的數據提供近乎實時的搜索和分析。無論您擁有結構化或非結構化文本、數字數據還是地理空間數據,Elasticsear... ...
  • 簡介 前幾天搗鼓了一下Ubuntu,正是想用一下我舊電腦上的N卡,可以用GPU來跑代碼,體驗一下多核的快樂。 還好我這破電腦也是支持Cuda的: $ sudo lshw -C display *-display description: 3D controller product: GK208M [ ...
  • https://www.cnblogs.com/yeungchie/ 函數功能 Perl 中 shift 函數可以返回列表的第一個元素,並將後續所有元素向前移位( 索引值減 1 )。輸入可選,預設為 @_ 或者 @ARGV。 my @foo = qw( 1 2 3 4 ); say shift @f ...
  • 今日內容概要 昨日回顧 反序列化類校驗部分源碼解析(瞭解) 斷言 drf之請求(配置解析類) drf之響應(配置響應類,Resposne的源碼的屬性) 視圖組件介紹及兩個視圖基類與五個視圖擴展類的用法介紹 . . . . 昨日回顧 # 1 序列化類的常用欄位 -CharField 。。。。 -Lis ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...