Eureka注冊中心(黑馬學習筆記)

Eureka注冊中心

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

大家思考幾個問題:

  • order-service在發起遠程調用的時候,該如何得知user-service實例的ip地址和端口?

  • 有多個user-service實例地址,order-service調用時該如何選擇?

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

1.Eureka的結構和作用

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

回答之前的各個問題。

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

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

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

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

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

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

  • order-service從實例列表中利用負載均衡算法選中一個實例地址

  • 向該實例地址發起遠程調用

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

  • user-service會每隔一段時間(默認30秒)向eureka-server發起請求,報告自己狀態,稱為心跳

  • 當超過一定時間沒有發送心跳時,eureka-server會認為微服務實例故障,將該實例從服務列表中剔除

  • order-service拉取服務時,就能將故障實例排除了

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

因此,接下來我們動手實踐的步驟包括:

2.搭建eureka-server

首先大家注冊中心服務端:eureka-server,這必須是一個獨立的微服務

2.1.創建eureka-server服務

在cloud-demo父工程下,創建一個子模塊:

填寫模塊信息:

然后填寫服務信息:

2.2.引入eureka依賴

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

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

2.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);
? ? }
}

2.4.編寫配置文件

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

server:
? port: 10086
spring:
? application:
? ? name: eureka-server
eureka:
? client:
? ? service-url:?
? ? ? defaultZone: http://127.0.0.1:10086/eureka

2.5.啟動服務

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

看到下面結果應該是成功了:

3.服務注冊

下面,我們將user-service注冊到eureka-server中去。

1)引入依賴

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

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

2)配置文件

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

spring:
? application:
? ? name: userservice
eureka:
? client:
? ? service-url:
? ? ? defaultZone: http://127.0.0.1:10086/eureka

3)啟動多個user-service實例

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

首先,復制原來的user-service啟動配置:

然后,在彈出的窗口中,填寫信息:

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

不過,第一個是8081端口,第二個是8082端口。

啟動兩個user-service實例:

查看eureka-server管理頁面:

4.服務發現

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

1)引入依賴

之前說過,服務發現、服務注冊統一都封裝在eureka-client依賴,因此這一步與服務注冊時一致。

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

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

2)配置文件

服務發現也需要知道eureka地址,因此第二步與服務注冊一致,都是配置eureka信息:

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

spring:
? application:
? ? name: orderservice
eureka:
? client:
? ? service-url:
? ? ? defaultZone: http://127.0.0.1:10086/eureka

3)服務拉取和負載均衡

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

不過這些動作不用我們去做,只需要添加一些注解即可。

在order-service的OrderApplication中,給RestTemplate這個Bean添加一個@LoadBalanced注解:

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

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

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

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

相關文章

六、行列式基本知識

目錄 1、行列式的特性 2、行列式的計算方法: 2.1 通過行列式的定義去計算:對角法則。 2. 2 利用行列式的性質將行列式轉化為上三角行列式: ①行列式的性質 : 性質一: 性質二: 性質三: 性質四:行列式之間的加法

TreeData 數據查找

TreeData 數據查找 最近做需求的時候遇到了這樣的一個需求&#xff0c;Tree組件數據支持查找&#xff0c;而且TreeData的數據層級是無限級的 開始想的事借助UI組件庫&#xff08;Ant-design-vue&#xff09;中的Tree組件的相關方法直接實現,看了下api 發現沒法實現&#xff0c;…

超級實用的python代碼片段匯總和詳細解析(16個)

目錄 1. 生成隨機文本 2. 計算文本文件中的字數 3. 替換文件文件中的字串 4. 多文件名的批量替換 5. 從網站提取數據 6. 批量下載圖片 7.批量刪除空文件夾 8.Excel表格讀寫 9.合并Excel表格工作簿 10.數據庫SQL查詢 11. 系統進程查殺 12.圖像尺寸調整和裁剪 13.圖…

redis實現消息隊列redis發布訂閱redis監聽key

文章目錄 Redis消息隊列實現異步秒殺1. jvm阻塞隊列問題2. 什么是消息隊列3. Redis實現消息隊列1. 基于List結構模擬消息隊列操作優缺點 2. 基于PubSub發布訂閱的消息隊列操作優缺點spring 結合redis的pubsub使用示例1. 引入依賴2. 配置文件3. RedisConfig4. CustomizeMessageL…

大語言模型的開山之作—探秘GPT系列:GPT-1-GPT2-GPT-3的進化之路

模型模型參數創新點評價GPT1預訓練微調&#xff0c; 創新點在于Task-specific input transformations。GPT215億參數預訓練PromptPredict&#xff0c; 創新點在于Zero-shotZero-shot新穎度拉滿&#xff0c;但模型性能拉胯GPT31750億參數預訓練PromptPredict&#xff0c; 創新點…

pclpy 可視化點云(多窗口可視化、單窗口多點云可視化)

pclpy 可視化點云&#xff08;多窗口可視化、單窗口多點云可視化&#xff09; 一、算法原理二、代碼三、結果1.多窗口可視化結果2.單窗口多點云可視化 四、相關數據五、問題與解決方案1.問題2.解決 一、算法原理 原理看一下代碼寫的很仔細的。。目前在同一個窗口最多建立2個窗…

ESP8266智能家居(3)——單片機數據發送到mqtt服務器

1.主要思想 前期已學習如何用ESP8266連接WIFI&#xff0c;并發送數據到服務器。現在只需要在單片機與nodeMCU之間建立起串口通信&#xff0c;這樣單片機就可以將傳感器測到的數據&#xff1a;光照&#xff0c;溫度&#xff0c;濕度等等傳遞給8266了&#xff0c;然后8266再對數據…

Java Web3J :使用web3j調用自己的智能合約,返回一個內部有數組的對象結構時出現NPE問題

之前有寫過一篇文章Java Web3J :使用web3j調用自己的智能合約的方法(教程),當時只是簡單的方法調用,也不涉及到什么復雜的數據類型,入參是long類型,出參是String類型。 目錄 問題描述報錯信息嘗試解決控制變量法查看源碼網上查閱解決最后問題描述 遇到這個問題是因為有…

【AI應用】SoraWebui——在線文生視頻工具

SoraWebui 是一個開源項目&#xff0c;允許用戶使用 OpenAI 的 Sora 模型使用文本在線生成視頻&#xff0c;從而簡化視頻創建&#xff0c;并具有輕松的一鍵網站部署功能 在 Vercel 上部署 1. 克隆項目 git clone gitgithub.com:SoraWebui/SoraWebui.git 2. 安裝依賴 cd Sor…

本科畢業設計(論文)開題報告:基于人工智能的短視頻獲客平臺的設計與實現

目錄 1.選題概述1.題目背景2.目的及意義3.技術現狀 2.題目內容1.任務概述2.系統設計1.數據采集模塊&#xff1a;2.數據處理與分析模塊&#xff1a;3.客戶識別模塊&#xff1a;4.推廣策略模塊&#xff1a; 3.功能模塊1.數據采集模塊&#xff1a;2.數據處理與分析模塊&#xff1a…

【Java EE初階二十】http的簡單理解(一)

1. 初識http HTTP 最新的版本應該是 HTTP/3.0&#xff0c;目前大規模使用的版本 HTTP/1.1&#xff1b; 下面來簡單說明一下使用 HTTP 協議的場景: 1、瀏覽器打開網站 (基本上) 2、手機 APP 訪問對應的服務器 (大概率) 前面的 TCP與UDP 和http不同&#xff0c;HTTP 的報文格式&a…

React基礎-webpack+creact-react-app創建項目

學習視頻&#xff1a;學習視頻 2節&#xff1a;webpack工程化創建項目 2.1.webpack工程化工具&#xff1a;vite/rollup/turbopak; 實現組件的合并、壓縮、打包等&#xff1b; 代碼編譯、兼容、校驗等&#xff1b; 2.2.React工程化/組件開發 我們可以基于webpack自己去搭建…

sql-labs25-28a

一、環境 網上都有不過多闡述 二、sql-labs第25關 它說你的OR和and屬于它,那就是過濾了OR和and 注入嘗試 不用or和and進行爆破注入,很明顯是有注入點的 ?id-1 union select 1,2,3-- 查看數據庫 ok&#xff0c;此道題算是解了但是如果我們用了and了呢 ?id-1 and updatex…

淺談集群的分類

本文主要介紹集群部署相關的知識&#xff0c;介紹集群部署的基礎&#xff0c;集群的分類、集群的負載均衡技術&#xff0c;集群的可用性以及集群的容錯機制。隨后介紹Redis-Cluster以及Mysql的架構以及主從復制原理。 集群介紹 單臺服務器本身會受到帶寬、內存、處理器等多方面…

STM32-串口通信(串口的接收和發送)

文章目錄 STM32的串口通信一、STM32里的串口通信二、串口的發送和接收串口發送串口接收 三、串口在STM32中的配置四、串口接收的兩種實現方式1. 需要更改的地方2. 查詢RXNE標志位3. 使用中斷 總結 STM32的串口通信 本文在于記錄自己的學習過程中遇到的問題和總結&#xff0c;各…

golang,gin腳手架,完美集成與結構化,gin-restful-api模板gin-layout,開箱即用

關于gtools golang非常奈斯&#xff0c;gin作為web框架也非常奈斯&#xff0c;但我們在開發過程中&#xff0c;前期搭建會花費大量的時間&#xff0c;且還不盡人意。 為此我集成了gin-restful-api的模板gin-layout&#xff0c;還有腳手架一鍵生成項目。 集成相關 ginviperz…

大型語言模型的語義搜索(一):關鍵詞搜索

關鍵詞搜索(Keyword Search)是文本搜索種一種常用的技術&#xff0c;很多知名的應用app比如Spotify、YouTube 或 Google map等都會使用關鍵詞搜索的算法來實現用戶的搜索任務&#xff0c;關鍵詞搜索是構建搜索系統最常用的方法&#xff0c;最常用的搜索算法是Okapi BM25&#x…

Liunx使用nginx和http搭建yum-server倉庫

文章目錄 1. yum-server的搭建方式2. nginx搭建yum-server倉庫2.1. 安裝配置nginx2.2 配置yum-server的rpm2.3. 同步yum源相關包2.3.1 rsync同步源3.3.1 reposync同步源 2.4. 配置客戶端訪問yum配置2.5. 驗證測試 3. http服務搭建yum-server倉庫3.1. 安裝配置http3.2 配置yum-s…

基于微信小程序校園洗衣系統設計與實現(PHP后臺)可行性分析

博主介紹&#xff1a;黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者&#xff0c;CSDN博客專家&#xff0c;在線教育專家&#xff0c;CSDN鉆石講師&#xff1b;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

Firewalld防火墻

Firewalld概述 Firewalld firewalld防火墻是centos7系統默認防火墻的防火墻管理工具&#xff0c;取代了之前的iptables防火墻&#xff0c;也是工作在網絡層&#xff0c;屬于包過濾防火墻。 支持網絡區域所定義的網絡鏈接以及接口安全等級的動態防火墻管理工具至此IPv4、IPv6…