微服務2--服務治理與服務調用

前言?:本文主要闡述微服務架構中的服務治理,以及Nacos環境搭建、服務注冊、服務調用,負載均衡以及Feign實現服務調用。

服務治理

服務治理是微服務架構中最核心最基本的模塊。用于實現各個微服務的自動化注冊與發現。
服務注冊:在服務治理框架中,都會構建一個注冊中心,每個服務單元向注冊中心登記自己提供服 務的詳細信息。并在注冊中心形成一張服務的清單,服務注冊中心需要以心跳的方式去監測清單中 的服務是否可用,如果不可用,需要在服務清單中剔除不可用的服務。
服務發現:服務調用方向服務注冊中心咨詢服務,并獲取所有服務的實例清單,實現對具體服務實 例的訪問。

這里還有一個必不可少的組件,就是服務注冊中心,它是微服務架構非常重要的一個組件,在微服務架構里主要起到了協調者的一個作用。

常見的服務注冊中心?

?Zookeeper:是一個分布式服務框架,主要用來解決分布式應用中經常遇到的數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用 配置項的管理等。

?Eureka:Spring Cloud 微服務框架默認的也是推薦的服務注冊中心,主要作用就是做服務注冊和發現。主要面向分布式,服務化的系統提供服務注冊、服務發現 和 配置管理的功能。

?Nacos:Ailibab旗下的開源項目,是一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺,負責服務注冊發現和服務配置。

對比總結

特性EurekaNacosZookeeper
一致性模型APAP/CP 可切換CP
健康檢查心跳TCP/HTTP/自定義心跳
配置管理不支持支持支持(ZNode)
多數據中心不支持支持不支持
社區生態停滯活躍(阿里云)成熟(Apache)
適用場景Spring Cloud 舊項目全功能服務治理強一致性協調服務

Nacos

????????Nacos(Dynamic Naming and Configuration Service)是阿里巴巴開源的一款集服務注冊與發現、配置管理于一體的動態服務管理平臺。它幫助開發者構建云原生應用和微服務架構,實現服務的動態發現、健康管理、配置統一管理等功能。?

環境搭建

下載地址:https://github.com/alibaba/nacos/releases

進入bin目錄

啟動Nacos?

startup.cmd -m standalone

訪問網址:127.0.0.1:8848/nacos?

服務注冊

?1.添加依賴

<!--nacos 客戶端-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.啟動類注解標簽

@EnableDiscoveryClient?

3. 定義服務名,添加nacos服務地址

spring:application:name: service-order #服務名cloud:nacos:discovery:server-addr: 127.0.0.1:8848 #nacos 地址

此時商品,訂單,用戶服務均已注冊成功。?

服務調用

使用 nacos 客戶端根據服務名動態獲取服務地址和端口
@RestController
@RequestMapping("/order")
public class OrderController{@AutowiredOrderService orderService;@AutowiredDiscoveryClient discoveryClient;@AutowiredRestTemplate restTemplate;@RequestMapping("/create/{pid}/{uid}/{num}")public Order createOrder(@PathVariable("pid") int pid, @PathVariable("uid")int uid, @PathVariable("num") int num){ServiceInstance serviceInstance = discoveryClient.getInstances("service-product").get(0);//ip + portString purl = serviceInstance.getHost() + ":" + serviceInstance.getPort();//使用ServiceInstance userviceInstance = discoveryClient.getInstances("service-user").get(0);//ip + portString uurl = userviceInstance.getHost() + ":" + userviceInstance.getPort();Product p = restTemplate.getForObject( "http://" + purl + "/product/get/" + pid, Product.class);User u = restTemplate.getForObject( "http://" + uurl + "/user/get/" + uid, User.class);Order order= null;if(p!=null){if(p.getStock()>=num){if(u!=null){order = orderService.saveorder(pid,uid,num);}}}return order;}
}

?與單一使用 RestTemplate 使用 http 方式遠程訪問相比,解決了很多繁瑣的步驟與人工維護。

負載均衡?

負載均衡就是將負載(工作任務,訪問請求)進行分攤到多個操作單元(服務器,組件)上進行執行。?

自定義實現

1.修改端口啟動多個商品微服務

2.將獲取服務的方式改為隨機獲取

?核心代碼:

//獲取服務列表
List<ServiceInstance> instances =
discoveryClient.getInstances("service-product");
//隨機生成索引
Integer index = new Random().nextInt(instances.size());
//獲取服務
ServiceInstance productService = instances.get(index);
//獲取服務地址
String purl = productService.getHost() + ":" +
productService.getPort();

Ribbon實現

?Ribbon 是 Spring Cloud 的一個組件, 它可以讓我們使用一個注解就能輕松的搞定負載均衡。

1.在 RestTemplate 的生成方法上添加@LoadBalanced 注解

2.修改服務調用的方法

        Product p = restTemplate.getForObject( "http://service-product/product/get/" + pid, Product.class);User u = restTemplate.getForObject( "http://service-user/user/get/" + uid, User.class);

Ribbon 支持的負載均衡策略 Ribbon 內置了多種負載均衡策略,內部負載均衡的頂級接口為 com.netflix.loadbalancer.IRule

3. 配置

ribbon:ConnectTimeout: 2000 # 請求連接的超時時間ReadTimeout: 5000 # 請求處理的超時時間
service-product: # 調用的提供者的名稱ribbon:NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule #負載均衡策略

Ribbon 的七種負載均衡策略

輪詢策略: RoundRobinRule,按照一定的順序依次調用服務實例。比如一 共有 3 個服務,第一次調用服務 1,第二次調用服務 2,第三次調用服務 3, 依次類推。
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
權重策略: WeightedResponseTimeRule,根據每個服務提供者的響應時 間分配一個權重,響應時間越長,權重越小,被選中的可能性也就越低。它的實現原理是,剛開始使用輪詢策略并開啟一個計時器,每一段時間收集一次所有服 務提供者的平均響應時間,然后再給每個服務提供者附上一個權重,權重越高被選中的概率也越大。
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
隨機策略: RandomRule,從服務提供者的列表中隨機選擇一個服務實例。
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
最小連接數策略: BestAvailableRule,也叫最小并發數策略,它是遍歷服務提供者列表,選取連接數最小的?個服務實例。如果有相同的最小連接數,那么會調用輪詢策略進行選取。
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule
可用敏感性策略: AvailabilityFilteringRule,先過濾掉非健康的服務實例, 然后再選擇連接數較小的服務實例。
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule
區域敏感策略: ZoneAvoidanceRule,根據服務所在區域(zone)的性能和服務的可用性來選擇服務實例,在沒有區域的環境下,該策略和輪詢策略類似。
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule

Feign

服務調用

1.添加依賴

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.啟動類添加Feign注解

@EnableFeignClients//開啟 Fegin

?3.創建Service接口,使用Feign實現服務調用

@FeignClient(name = "service-product")
public interface ProductService {@GetMapping("/product/get/{id}")Product findProductById(@PathVariable int id);
}

4.調用

    //使用前要注入@AutowiredProductService productService;
        //使用feignProduct p = productService.findProductById(pid);//不使用feignUser u = restTemplate.getForObject( "http://service-user/user/get/" + uid, User.class);

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

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

相關文章

智能麻將出牌組件

開篇引言? 麻將作為一款風靡全球的策略性游戲&#xff0c;其復雜的規則和多變的牌局給玩家帶來了無盡樂趣。在數字化時代&#xff0c;運用編程技術為麻將游戲賦予智能&#xff0c;實現自動出牌功能&#xff0c;不僅能提升玩家體驗&#xff0c;還能深入探索算法在博弈游戲中的…

“大灣區珠寶藝境花園”璀璨綻放第五屆消博會

2025年4月13日&#xff0c;第五屆中國國際消費品博覽會&#xff08;以下簡稱"消博會"&#xff09;重要主題活動——《大灣區珠寶藝境花園》啟動儀式在海南國際會展中心2號館隆重舉行。由廣東省金銀珠寶玉器業廠商會組織帶領粵港澳大灣區優秀珠寶品牌&#xff0c;以“…

基于前端技術的QR碼API開發實戰:從原理到部署

前言 QR碼&#xff08;Quick Response Code&#xff09;是一種二維碼&#xff0c;于1994年開發。它能快速存儲和識別數據&#xff0c;包含黑白方塊圖案&#xff0c;常用于掃描獲取信息。QR碼具有高容錯性和快速讀取的優點&#xff0c;廣泛應用于廣告、支付、物流等領域。通過掃…

利用耦合有限元和神經網絡計算的骨重塑模擬多尺度方法

Multiscale methodology for bone remodelling simulation using coupled finite element and neural network computation 摘要&#xff1a;本文旨在開發一種基于有限元分析&#xff08;FEA&#xff09;和神經網絡&#xff08;NN&#xff09;計算的多尺度分層混合模型&#xf…

使用異步特征引發的錯誤error[E0195]: lifetime parameters or bounds on method `before_save`

問題描述&#xff1a; 使用SeaOrm保存實體到數據庫時不想每次都設置更新時間&#xff0c;所以想通過實現ActiveModelBehavior在保存實體前統一設置更新時間 impl ActiveModelBehavior for ActiveModel {async fn before_save<C>(self, _db: &C, _insert: bool) -&…

TVS管與ESD保護二極管詳解:原理、區別與應用選型

一、TVS管&#xff08;瞬態電壓抑制二極管&#xff09; 1. 基本定義 TVS管&#xff08;Transient Voltage Suppressor&#xff09; 是一種用于抑制瞬態高壓脈沖的半導體器件&#xff0c;通過雪崩擊穿效應快速鉗位電壓&#xff0c;保護后端電路。 2. 核心特性參數 參數定義公…

Day08 【基于jieba分詞實現詞嵌入的文本多分類】

基于jieba分詞的文本多分類 目標數據準備參數配置數據處理模型構建主程序測試與評估測試結果 目標 本文基于給定的詞表&#xff0c;將輸入的文本基于jieba分詞分割為若干個詞&#xff0c;然后將詞基于詞表進行初步編碼&#xff0c;之后經過網絡層&#xff0c;輸出在已知類別標…

入門-C編程基礎部分:6、常量

飛書文檔https://x509p6c8to.feishu.cn/wiki/MnkLwEozRidtw6kyeW9cwClbnAg C 常量 常量是固定值&#xff0c;在程序執行期間不會改變&#xff0c;可以讓我們編程更加規范。 常量可以是任何的基本數據類型&#xff0c;比如整數常量、浮點常量、字符常量&#xff0c;或字符串字…

第二階段:數據結構與函數

模塊4&#xff1a;常用數據結構 (Organizing Lots of Data) 在前面的模塊中&#xff0c;我們學習了如何使用變量來存儲單個數據&#xff0c;比如一個數字、一個名字或一個布爾值。但很多時候&#xff0c;我們需要處理一組相關的數據&#xff0c;比如班級里所有學生的名字、一本…

【C++算法】61.字符串_最長公共前綴

文章目錄 題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;解釋 題目鏈接&#xff1a; 14. 最長公共前綴 題目描述&#xff1a; 解法 解法一&#xff1a;兩兩比較 先算前兩個字符串的最長公共前綴&#xff0c;然后拿這個最長公共前綴和后面一個來比較&…

JVM 調優不再難:AI 工具自動生成內存優化方案

在 Java 應用程序的開發與運行過程中&#xff0c;Java 虛擬機&#xff08;JVM&#xff09;的性能調優一直是一項極具挑戰性的任務&#xff0c;尤其是內存優化方面。不合適的 JVM 內存配置可能會導致應用程序出現性能瓶頸&#xff0c;甚至頻繁拋出內存溢出異常&#xff0c;影響業…

紛析云開源財務軟件:企業財務數字化轉型的靈活解決方案

紛析云是一家專注于開源財務軟件研發的公司&#xff0c;自2018年成立以來&#xff0c;始終以“開源開放”為核心理念&#xff0c;致力于通過技術創新助力企業實現財務管理的數字化與智能化轉型。其開源財務軟件憑借高擴展性、靈活部署和全面的功能模塊&#xff0c;成為眾多企業…

【數字圖像處理】數字圖像空間域增強(3)

圖像銳化 圖像細節增強 圖像輪廓&#xff1a;灰度值陡然變化的部分 空間變化&#xff1a;計算灰度變化程度 圖像微分法&#xff1a;微分計算灰度梯度突變的速率 一階微分&#xff1a;單向差值 二階微分&#xff1a;雙向插值 一階微分濾波 1&#xff1a;梯度法 梯度&#xff1…

基于Linux的ffmpeg python的關鍵幀抽取

1.FFmpeg的環境配置 首先強調&#xff0c;ffmpeg-python包與ffmpeg包不一樣。 1) 創建一個虛擬環境env conda create -n yourenv python3.x conda activate yourenv2) ffmpeg-python包的安裝 pip install ffmpeg-python3) 安裝系統級別的 FFmpeg 工具 雖然安裝了 ffmpeg-p…

C#進階學習(四)單向鏈表和雙向鏈表,循環鏈表(上)單向鏈表

目錄 前置知識&#xff1a; 一、鏈表中的結點類LinkedNode 1、申明字段節點類&#xff1a; 2、申明屬性節點類: 二、兩種方式實現單向鏈表 ①定框架&#xff1a; ②增加元素的方法&#xff1a;因為是單鏈表&#xff0c;所以增加元素一定是只能在末尾添加元素&#xff0c;…

RK3588 Buildroot 串口測試工具

RK3588 Buildroot串口測試工具(含代碼) 一、引言 1.1 目的 本文檔旨在指導開發人員能快速測試串口功能 1.2 適用范圍 本文檔適用于linux 系統串口測試。 二、開發環境準備 2.1 硬件環境 開發板:RK3588開發板,確保其串口硬件連接正常,具備電源供應、調試串口等基本硬…

HOJ PZ

https://docs.hdoi.cn/deploy 單體部署 請到~/hoj-deploy/standAlone的目錄下&#xff0c;即是與docker-compose.yml的文件同個目錄下&#xff0c;該目錄下有個叫hoj的文件夾&#xff0c;里面的文件夾介紹如下&#xff1a; hoj ├── file # 存儲了上傳的圖片、上傳的臨…

EtherCAT 的優點與缺點

EtherCAT&#xff08;以太網控制自動化技術&#xff09;是一種高性能的工業以太網協議&#xff0c;廣泛應用于實時自動化控制。以下是其核心優缺點分析&#xff1a; ?一、EtherCAT 的核心優點? 1. ?超低延遲 & 高實時性? ?原理?&#xff1a;采用"?Processing…

高并發多級緩存架構實現思路

目錄 1.整體架構 3.安裝環境 1.1 使用docket安裝redis 1.2 配置redis緩存鏈接&#xff1a; 1.3 使用redisTemplate實現 1.4 緩存注解優化 1.4.1 常用緩存注解簡紹 1.4.2 EnableCaching注解的使用 1.4.3使用Cacheable 1.4.4CachePut注解的使用 1.4.5 優化 2.安裝Ngin…

Qt QML實現Windows桌面顏色提取器

前言 實現一個簡單的小工具&#xff0c;使用Qt QML實現Windows桌面顏色提取器&#xff0c;實時顯示鼠標移動位置的顏色值&#xff0c;包括十六進制值和RGB值。該功能在實際應用中比較常見&#xff0c;比如截圖的時候&#xff0c;鼠標移動就會在鼠標位置實時顯示坐標和顏色值&a…