Spring Cloud系列—Eureka服務注冊/發現

上篇文章:

Spring Cloud系列—簡介https://blog.csdn.net/sniper_fandc/article/details/149936339?fromshare=blogdetail&sharetype=blogdetail&sharerId=149936339&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

????????在上篇文章中,代碼有一些缺點:

????????1.使用RestTemplate時候URL寫死了,如果服務提供方修改ip,就需要改動代碼。

????????2.如果服務提供方多機部署,ip如何寫。

????????3.返回結果如何共用,不重復寫代碼,并且URL也容易寫錯,如何復用。

????????4.服務提供方的接口實際上是開放的,存在一定風險,應該只對服務調用方開放。

????????上述缺點可以使用服務注冊/發現來解決:

1 服務注冊/發現

????????服務注冊/發現包括三個角色:服務注冊中心、服務消費者、服務提供者:

????????服務注冊中心:保存服務的注冊信息(比如ip),服務節點變更會同步更新。使用相關通信機制保持和服務提供者之間的通信,如果服務提供者無法通信,就會注銷服務實例。

????????服務消費者:調用其它微服務接口的一方。

????????服務提供者:被其它微服務調用接口的一方。

????????服務發現是指服務消費者要調用服務提供方接口時,先去服務注冊中心查詢服務相關信息,比如地址等。

????????服務注冊是指服務提供方啟動時主動向服務注冊中心注冊服務,并定期向注冊中心發送心跳包,匯報自身存活狀態。

2 CAP理論

????????C:一致性(Consistency),指同一時間無論訪問主節點還是從節點獲得的數據是一致的(強一致性,弱一致性是主節點涉及修改后由于同步需要時間,因此存在一定時間的不一致)。

????????A:可用性(Availability),指任何時候訪問系統都有響應,無論響應的數據是否過時或錯誤。

????????P:分區容錯性(Partition Tolerance),指出現網絡分區后(某節點故障),系統仍能提供服務。

????????CAP理論是分布式系統最基礎最關鍵的理論。但是一致性和可用性無法同時滿足,因為要滿足一致性,就需要數據同步時不能訪問系統,這違背了可用性;如果要滿足可用性,有可能訪問過時數據(還未同步的從節點數據),這違背了一致性。因此C和A無法同時滿足。

????????P必須要滿足,因此就出現了CP和CA兩種組合,而常見的注冊中心組件就是選擇了兩種組合中的一種:

Zookeeper

Eureka

Nacos

滿足CP

滿足CA

CP或CA(默認CA)

????????實際上,為用戶提供訪問時,提供過時的數據勝過不提供響應。

3 Eureka

????????Eureka分為Eureka Server和Eureka Client,Eureka Server供注冊中心使用,Eureka Client供服務提供者使用。

3.1 搭建注冊中心

????????由于注冊中心也相當于一個微服務,因此也需要創建一個項目并啟動,這里還是采用父子項目的形式創建,仍然用前面創建的父項目:

????????配置pom文件:

????<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

????????由于這不需要進行SpringBoot Web開發,因此不需要SpringBoot Web相關依賴。配置SpringBoot配置文件:

server:port: 10010spring:application:name: eureka_servereureka:instance:hostname: localhostclient:fetch-registry: false # 是否從其它Eureka Server獲取注冊信息,默認為true.因為這是一個單點的Eureka Server,不需要同步其他的Eureka Server節點的數據,這里設置為falseregister-with-eureka: false # 是否將自己注冊到Eureka Server,默認為true.由于當前應用就是Eureka Server,故而設置為false.service-url:# 設置與Eureka Server的地址,查詢服務和注冊服務都需要依賴這個地址.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

????????啟動類:

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

????????這里必須要加@EnableEurekaServer才能成功開啟注冊中心服務。運行代碼結果如下(訪問127.0.0.1:10010):

3.2 服務注冊

????????引入依賴:

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

????????SpringBoot配置文件:

spring:application:name: product-serviceeureka:client:service-url:defaultZone: http://127.0.0.1:10010/eureka

????????啟動項目,就可以發現該服務已經注冊到Eureka中:

3.3?服務發現

????????引入依賴:

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

????????SpringBoot配置文件:

spring:application:name: order-serviceeureka:client:service-url:defaultZone: http://127.0.0.1:10010/eureka

????????修改遠程調用代碼:

@Servicepublic class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate DiscoveryClient discoveryClient;public OrderInfo selectOrderById(Integer orderId) {OrderInfo orderInfo = orderMapper.selectOrderById(orderId);//舊方式//String url = "http://127.0.0.1:8081/product/" + orderInfo.getProductId();//ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);//新方式:通過注冊中心進行服務發現List<ServiceInstance> productService = discoveryClient.getInstances("product-service");EurekaServiceInstance serviceInstance = (EurekaServiceInstance) productService.get(0);String url = serviceInstance.getUri() + "/product/" + orderInfo.getProductId();ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;}}

????????運行代碼,結果如下:

????????可以發現,配置了注冊中心后,關于服務之間的遠程調用更加靈活方便。

4 Eureka與Zookeeper區別

????????二者都是用于服務注冊和服務發現的,但是也存在很大不同:

????????1.Eureka是Netflix開源項目,Zookeeper是Apache開源項目。

????????2.Eureka基于AP原則,保證高可用性;Zookeeper基于CP原則,保證數據一致性。

????????3.集群環境下,Eureka每個節點地位均等;Zookeeper節點存在地位劃分,主要是Leader、Follower或Observer,這就意味Leader節點故障需要進行重新選舉Leader,存在一定時間的服務不可用。

下篇文章:

Spring Cloud系列—LoadBalance負載均衡https://blog.csdn.net/sniper_fandc/article/details/149938185?fromshare=blogdetail&sharetype=blogdetail&sharerId=149938185&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

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

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

相關文章

QUdpSocket 詳解:從協議基礎、通信模式、數據傳輸特點、應用場景、調用方式到實戰應用全面解析

前言 在網絡通信的世界里&#xff0c;UDP 協議以其獨特的 “快準狠” 特性占據著一席之地。作為 Qt 框架中 UDP 協議的封裝者&#xff0c;QUdpSocket 為開發者提供了便捷高效的網絡編程接口。? 一、UDP 協議基礎&#xff1a;QUdpSocket 的 歷史 要理解 QUdpSocket&#xff0c;…

vue中reactive()和ref()的用法

在 Vue 3 的 Composition API 里&#xff0c;reactive() 和 ref() 都是用來把「普通數據」變成「響應式數據」的函數。 一句話區別&#xff1a; reactive() 只能包裹對象/數組&#xff1b;ref() 可以包裹任何類型&#xff0c;但在 模板 里讀取時&#xff0c;不需要 .value。 下…

【公考基礎】----備考規劃篇

公考 公考&#xff1a;國家公務員考試 即&#xff1a;國考和省考 或 參公考試 包括但不限于&#xff1a;國考、省考、事業單位招考、教師招聘考試、軍隊文職招考等&#xff0c;一切進入國家黨政軍事業單位的考試。 考公整體流程 備考前&#xff1a;準備備考資料&#xf…

STM32江科大學習筆記,全功能按鍵非阻塞式實現,按鍵點擊,雙擊,長按

目錄 一、前言 二、關于實現非阻塞的辦法 2.1 中斷類型的選擇 2.2 定時器中斷 二、程序流程圖 2.1 狀態S0空閑狀態 2.2 狀態S1按鍵判斷長按還是其他的事件 2.3 狀態S2按鍵判斷雙擊或者單擊 2.4 狀態S3按鍵已雙擊狀態 2.5 狀態S4長按狀態 三、編寫代碼 3.1 按鍵初始…

動態代理常用的兩種方式?

口語化回答好的&#xff0c;面試官&#xff0c;動態常見的兩種&#xff0c;一種是 jdk 動態代理&#xff0c;一種是 cglib 動態代理&#xff0c;兩者的最主要區別是 jdk 動態代理主要是依賴于接口創建代理對象&#xff0c;cglib 是通過生成子類的方式&#xff0c;不需要接口&am…

StarRocks vs ClickHouse:2025 年 OLAP 引擎終極對比指南

StarRocks 與 ClickHouse&#xff1a;高性能 OLAP 引擎的兩種選擇在當今數據驅動的商業環境中&#xff0c;選擇合適的分析型數據庫對于企業數據戰略至關重要。StarRocks 和 ClickHouse 作為兩款領先的 OLAP&#xff08;在線分析處理&#xff09;引擎&#xff0c;各自擁有獨特的…

RuoYi-Cloud 微服務本地部署詳細流程實錄(IDEA + 本地 Windows 環境)

本文以 RuoYi-Cloud 3.x 版本為例&#xff0c;開發工具用的是 IntelliJ IDEA&#xff0c;數據庫為 MySQL 8.x&#xff0c;注冊中心選用本地 Nacos 2.2.3&#xff0c;Redis 為 3.x/5.x 均可。親測全流程可用&#xff0c;細節與官方文檔略有不同&#xff0c;避免新手踩坑。 目錄 …

2025年了,程序員轉行還這么難?別愁!大模型這趟“順風車”,你搭不搭?

在“大齡程序員的未來在何方”這篇文章里比較樂觀地介紹了程序員保持競爭力的幾個方向&#xff0c;但現實依然是殘酷的&#xff1a;很多人將不得不離開軟件開發工作&#xff0c;轉型去從事其他職業。 當你要這么做時&#xff0c;就會感慨&#xff1a;想不到一切竟如此艱難&…

CEH、OSCP、CISP、CISSP 四大網絡安全認證攻略

以下是 CEH、OSCP、CISP、CISSP 四大網絡安全認證的詳細對比&#xff0c;涵蓋認證定位、考試難度、適用場景及職業方向&#xff0c;幫助你快速選擇適合自己的證書&#xff1a;1. 核心區別速覽認證發證機構定位 考試形式適合人群國際認可度CEHEC-Council道德黑客滲透測試基礎選擇…

SnapDevelop支持uni-app開發:跨平臺與原生體驗的完美融合

隨著移動互聯網的迅速發展&#xff0c;開發者面臨著多平臺需求和技術挑戰。傳統開發模式要求為每個平臺編寫獨立代碼&#xff0c;不僅浪費時間&#xff0c;還增加了維護難度。作為一款強大的低代碼開發工具&#xff0c;SnapDevelop打破了這一局限&#xff0c;通過對uni-app的支…

海康威視相機,MVS連接成功,但無圖像怎么辦?

問題&#xff1a;準備一個常見的海康 相機去海康機器視覺官網下載MVS軟件。打開軟件&#xff0c;連接相機。顯示連接成功&#xff0c;并能看到相機的信息。點擊開始采集發現沒有圖像解決&#xff1a;右側找到觸發。1. 觸發模式 ON2.選擇 軟觸發3 啟用自動觸發點擊采集有圖像但一…

Linux systemd 系統管理:systemctl 控制服務與守護進程

Linux systemd 系統管理&#xff1a;systemctl 控制服務與守護進程系統啟動過程 Linux 系統的啟動過程遵循以下步驟&#xff1a; 開機自檢&#xff1a;計算機啟動后&#xff0c;BIOS/UEFI 進行硬件自檢&#xff0c;確認硬件設備正常MBR 引導&#xff1a;從指定的啟動設備讀取主…

《Day2-PyTorch Tensor 從入門到實踐:核心操作與避坑指南》

一、Tensor的創建 在Torch中張量以 "類" 的形式封裝起來&#xff0c;對張量的一些運算、處理的方法被封裝在類中&#xff0c;官方文檔&#xff1a; torch — PyTorch 2.7 documentation 1. 基本創建方式 以下講的創建tensor的函數中有兩個有默認值的參數dtype和d…

兩種格式數據介紹——bin 、 yuv文件

一、場景存儲 通常指的是用于存儲攝像頭或傳感器原始采集數據的文件格式&#xff0c;尤其是在自動駕駛、機器人、安防、工業視覺等需要記錄真實世界場景的應用中。格式存儲內容用途場景特點.binLiDAR點云、毫米波雷達數據、IMU、GPS、原始傳感器幀自動駕駛仿真、SLAM建圖、數據…

【網絡運維】Linux:SELinux簡介和配置

SELinux 介紹 SELinux 概述 文件權限控制了哪些用戶或用戶組可以訪問哪些特定文件&#xff0c;但未限定用戶訪問文件的方式。 例如&#xff1a;對于文件的寫入權限而言&#xff0c; 結構化數據文件是否應當設計為只能使用特定的程序寫入&#xff0c;但其他編輯器仍可以打開和修…

GaussDB SQL執行計劃詳解

1 問題現象SQL執行計劃是GaussDB性能分析及調優的核心&#xff0c;它輸出三個關鍵信息&#xff1a;訪問路徑:掃描表數據的路徑。連接順序&#xff1a;多表連接順序。連接方式&#xff1a;多表連接方式。2 技術背景GaussDB SQL語句執行計劃是數據庫為運行SQL語句而執行的操作步驟…

02.【數據結構-C語言】順序表(線性表概念、順序表實現:增刪查、前向聲明、順序表實現通訊錄項目:增刪改查、通訊錄數據導入及保存到本地文件)

目錄 1. 線性表 2. 順序表概念及分類 2.1 順序表的概念 2.2 順序表分類 2.3 動靜態順序表對比 3. 順序表的實現&#xff08;附完整版代碼&#xff09; 3.1 順序表結構體聲明 3.2 初始化&銷毀 3.3 插入&#xff08;尾插、頭插、指定位置之前插入&#xff09; 3.4 …

MyBatis核心配置深度解析:從XML到映射的完整技術指南

&#x1f527; MyBatis核心配置深度解析&#xff1a;從XML到映射的完整技術指南 &#x1f680; 引言&#xff1a;MyBatis作為Java生態中最受歡迎的持久層框架之一&#xff0c;其強大的配置體系是實現靈活數據訪問的核心。本文將深入解析MyBatis的配置文件架構、映射機制以及高級…

OpenCV HSV與RGB顏色模型的區別

HSV與RGB顏色模型的區別 HSV&#xff08;Hue, Saturation, Value&#xff09;和 RGB&#xff08;Red, Green, Blue&#xff09;是兩種不同的顏色表示方式&#xff0c;主要區別如下&#xff1a;對比項RGBHSV定義基于紅、綠、藍三原色的混合基于色相&#xff08;H&#xff09;、飽…

具有柔性關節的機械臂matlab仿真

柔性關節機械臂MATLAB仿真方案&#xff0c;包含動力學建模、控制器設計和可視化分析。該方案基于拉格朗日方程建立柔性關節模型&#xff0c;并實現了PD控制、滑模控制和自適應控制三種控制策略。 MATLAB仿真 %% 柔性關節機械臂仿真 - 完整系統 % 作者: MATLAB技術助手 % 日期: …