日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringCloud集成LoadBalance,负载均衡

發布時間:2023/12/8 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud集成LoadBalance,负载均衡 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

前一篇文章《SpringCloud集成OpenFeign,輕松RPC》給大家介紹了,如何在SpringCloud的開發中集成OpenFeign,去實現RPC的調用, 這個知識點是作為SpringCloud的開發中最常用的技巧,作為使用SpringCloud進行微服務開發的朋友一定要熟練的操作;同時,通過SpringCloud的OpenFeign調用也就真正拉開了微服務開發的序幕,通過OpenFeign就可以把我們多個不同的SpringBoot的微服務實現,集成在一個微服務的云環境里面了; 是能說簡單的實現和部署;但是作為一個高可用的微服務云,我們必須還要考慮到更多更高級的話題,比如負載均衡,服務熔斷降級,服務自動發現等; 今天咱們這個文章就接著上一文,進一步深入來介紹一下咱們的SpringCloud的微服務云體系里,如何去實現負載均衡這個功能。同樣的,咱們不談以前已經不被支持的SpringCloud地鐵站命名的版本,而是討論SpringCloud的最新版本2021.0.X

LoadBalance

翻遍CSDN或者很多的SpringCloud的技術論壇,甚至很多在論壇里加精的TOP流量的有關介紹和應用SpringCloud的LoadBalance的文章; 都是非常過期的版本,里面使用的都是Netflix的ribbon,作為LoadBalance的實現;看到這就是舊版本,因為首先Netflix的Ribbon項目,已經不再維護,所以不會再有更新;其次,從SpringCloud2020.0.X版本開始,SpringCloud官方就已經宣布不在對Netflix的幾個關鍵組件進行支持,其中就包括這個Ribbon; SpringCloud官方已經公布了自己的loadbalance的組件并進行了開源;所以新的使用SpringCloud的小伙伴們,如何還是用以前的這些文章介紹的方法只為越錯越遠。

LoadBalance和OpenFeign的關系

如同在上一篇文章發布以后,一些熱心的朋友的探究一樣; 為什么你介紹OpenFeign的RPC沒有介紹到LoadBalance呀? 有不少的熱心朋友看過上文后,都有這樣的疑問。

這就要給大家叨叨一下了, OpenFeign的定位是annotation化的RESTFUL Client; 認識其本質其實OpenFeign是SpringCloud里的RestTemplate更高階的一個升級組件,實現的是Restful Client,但是通過openFeign的一些annotation可以實現的比較簡單化而已;

而LoadBalanace是SpringCloud里的一個Common組件,是可以給其他組件提供服務的基礎組件; 我們可以看看SpringCloud里產品Map圖里的關系,就一目了然了。

使用LoadBalance無需OpenFeign的集成, 打開LoadBalance的支持功能,有關RestTemplate的地方就可以實現客戶端的負載均衡了, OpenFeign是RestTemplate的擴展,當然也就同樣可以支持到負載均衡。

細心的朋友可以發現,咱們下面介紹的有關Loadbalance的使用,基本上都是和OpenFeign沒有任何聯系的; OpenFeign只是我們后來進行驗證效果的方式;

引入LoadBalance包

引入SpringCloud官方推薦的LoadBalance包

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

加上這段即可開啟RestTemplate的LoadBalance的功能;

使用OpenFeign驗證

驗證OpenFeign的Loadbalance是否啟動;

// after Hystrix is removed from SpringCloud2021.0.1, the fallback is ineffective @FeignClient(name = "${codeman.service.name:codeman}", url = "${codeman.service.address:}", fallback = CodeManFallbackImpl.class) public interface CodeManFeign extends CodeManService {@RequestLine("GET /codeman/info/version")public String getVersion();@RequestLine("GET /codeman/info/author")public String getAuthor();@RequestLine("GET /codeman/info/request/{userid}") //對應請求方式和路徑public String requestLine(@Param("userid") String userid);}

這里特別注意,要OpenFeign真正的使用到LoadBalance,這個FeignClient的Annotation的Url是不能設置值的,如果設置了值,Feign里的LoadBalance將不會生效;即使你的LoadBalance已經開啟; 這里不要自做聰明的以為URL就是一個http的連接,url可以是http://xxxx這樣鏈接,也可以是servicename; 在feign某個版本中http://servicename等同于Name=servicename的效果,但是現在沒有這樣的用法了。

為什么URL設置了不生效, 看OpenFeign的源代碼可知道

沒有Nacos或者Ereuka

上面FeignClient的Name應該是微服務對應的serviceName;比如筆者使用的Nacos作為服務發現和注冊

但是如果沒有使用Nacos或者Eeruka或者其他的服務注冊和發現;如何來進行測試或者使用叻;

題外話

在K8s里,很簡單,因為云原生,K8s自帶CoreDns,直接域名基本去做負載均衡實現,根本就不在SpringCloud/SpringBoot這層實現,故不使用FeignClient的name的annotation,直接使用url對應于K8s里的service的域名,即支持了負載均衡,所以這就是為什么說SpringCloud就是玩玩而已,正在的微服務,云原生壓根就不是在springcloud里玩的;

如何解決上面的問題;

Loadbalance提供了SimpleDiscoveryClient實現,可以通過yaml配置將IP方式轉換為Servicename方式,

spring:cloud:discovery:client:simple:instances:codeman01:- uri: http://localhost:7500- uri: http://localhost:7400

如上配置,實際上就產出了一個SimpleDiscoveryClient的實現, servicename為codeman01; 兩個地址分別為 http://localhost:7500和 http://localhost:7400

LoadBalance策略配置

默認情況下; LoadBalance的算法策略是RoundRobinLoadBalancer; 可以通過配置或者自行實現的方式,切換成不同的策略; 這里不進行詳細的深入,可以自行查看SpringCloud Load Balance的文檔和代碼樣例。

最后效果

使用Knife4j來進行測試,效果如下

此時,Feign調用失敗; 調用的http://localhost:7500; Fallback的效果就是顯示SpringCloud

再次點擊;調用的http://localhost:7400; 訪問成功; 顯現如下效果

成功調用,沒有Fallback的調用

結束語

本文主要給大家介紹了SpringCloud里的LoadBalance這個組件; OpenFeign通過對LoadBalance的內部的集成及調用;可以使用到LoadBalance的功能, 不過大家要注意的是,新項目一定要進行升級; 就的Netflix的不再支持; 要使用咱們這里的介紹的LoadBalance; 本文僅僅是介紹了LoadBalance, OpenFeign在代碼功能上是如何進行LoadBalance的調用的,其實還是比較好進行研究的,大家可以自行閱讀OpenFeign的源代碼,幾行代碼即可了解其內部實現機理;有興趣的可以回復中交流; 負載均衡只是實現微服務體系中的多個高級話題之一,有關其他的高級應用和話題,我們將繼續在后面的文章中給大家介紹;還請各位朋友積極留言;持續關注;

想知悉哪些相關的技術點;咱們將進一步用文字來進行探究;

謝謝大家的關注!!!

總結

以上是生活随笔為你收集整理的SpringCloud集成LoadBalance,负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。