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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

跟我学Spring Cloud(Finchley版)-07-Ribbon入门

發(fā)布時(shí)間:2025/3/21 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跟我学Spring Cloud(Finchley版)-07-Ribbon入门 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

經(jīng)過前文講述,我們已經(jīng)實(shí)現(xiàn)了服務(wù)發(fā)現(xiàn)。本節(jié)來(lái)解決 跟我學(xué)Spring Cloud(Finchley版)-02-構(gòu)建分布式應(yīng)用 提到的如下問題:

負(fù)載均衡如何考慮?難道得在電影微服務(wù)和用戶微服務(wù)之間加個(gè)NGINX做負(fù)載均衡嗎?聽起來(lái)是可行的,但如果有10000+服務(wù)(這并不夸張,我司的微服務(wù)數(shù)目是這個(gè)數(shù)字乘以N,N >= m,哈哈哈)那這個(gè)NGINX的配置得有多復(fù)雜……

一般來(lái)說(shuō),提到負(fù)載均衡,大家一般很容易想到瀏覽器 -> NGINX -> 反向代理多個(gè)Tomcat這樣的架構(gòu)圖——業(yè)界管這種負(fù)載均衡模式叫“服務(wù)器端負(fù)載均衡”,因?yàn)榇朔N模式下,負(fù)載均衡算法是NGINX提供的,而NGINX部署在服務(wù)器端。

本節(jié)所講的Ribbon則是一個(gè)客戶端側(cè)負(fù)載均衡組件——通俗地說(shuō),就是集成在客戶端(服務(wù)消費(fèi)者一側(cè)),并提供負(fù)載均衡算法的一個(gè)組件。

Ribbon簡(jiǎn)介

Ribbon是Netflix發(fā)布的負(fù)載均衡器,它可以幫我們控制HTTP和TCP客戶端的行為。只需為Ribbon配置服務(wù)提供者地址列表,Ribbon就可基于負(fù)載均衡算法計(jì)算出要請(qǐng)求的目標(biāo)服務(wù)地址。

Ribbon默認(rèn)為我們提供了很多的負(fù)載均衡算法,例如輪詢、隨機(jī)、響應(yīng)時(shí)間加權(quán)等——當(dāng)然,為Ribbon自定義負(fù)載均衡算法也非常容易,只需實(shí)現(xiàn)IRule 接口即可。

TIPS

Ribbon的GitHub:<https://github.com/Netflix/ribbon&gt;

引入Ribbon

在Spring Cloud中,當(dāng)Ribbon與Eureka配合使用時(shí),Ribbon可自動(dòng)從Eureka Server獲取服務(wù)提供者地址列表,并基于負(fù)載均衡算法,選擇其中一個(gè)服務(wù)提供者實(shí)例。下圖展示了Ribbon與Eureka配合使用時(shí)的大致架構(gòu)。

Ribbon入門

代碼示例

  • 復(fù)制項(xiàng)目microservice-consumer-movie ,將ArtifactId修改為microservice-consumer-movie-ribbon 。

  • 加依賴:由于spring-cloud-starter-netflix-eureka-client 已經(jīng)包含spring-cloud-starter-netfilx-ribbon ,故而無(wú)需額外添加依賴。

  • 寫代碼:

    @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); }

    如代碼所示,只需在RestTemplate 上添加LoadBalanced 注解,即可讓RestTemplate整合Ribbon!

  • 調(diào)用:

    @GetMapping("/users/{id}") public User findById(@PathVariable Long id) { // 這里用到了RestTemplate的占位符能力 User user = this.restTemplate.getForObject("http://microservice-provider-user/users/{id}",User.class,id ); // ...電影微服務(wù)的業(yè)務(wù)... return user; }

    由代碼可知,我們將請(qǐng)求的目標(biāo)服務(wù)改成了http://microservice-provider-user/users/{id} ,也就是http://{目標(biāo)服務(wù)名稱}/{目標(biāo)服務(wù)端點(diǎn)} 的形式,Ribbon會(huì)自動(dòng)在實(shí)際調(diào)用時(shí),將目標(biāo)服務(wù)名替換為該服務(wù)的IP和端口

測(cè)試

  • 依次啟動(dòng)microservice-discovery-eureka 、microservice-provider-user 兩個(gè)實(shí)例、microservice-consumer-movie-ribbon
  • 訪問http://localhost:8010/movies/users/1 多次,會(huì)發(fā)現(xiàn)兩個(gè)user服務(wù)實(shí)例都會(huì)打印日志。

WARNING

事實(shí)上,這里的目標(biāo)服務(wù)名稱,在Ribbon里叫虛擬主機(jī)名 ,主機(jī)名是不能包含_ 等特殊字符的——這意味著,一般不建議配置spring.application.name = xxx_xxx ,如果你的應(yīng)用名稱一定(誰(shuí)這么變態(tài)??)帶有下劃線這種字符,那么請(qǐng)額外配置eureka.instance.virtual-host-name = 一個(gè)合法的主機(jī)名 ,否則Ribbon將會(huì)提示虛擬主機(jī)名不合法的異常(在早期的版本則是報(bào)空指針)!這點(diǎn)請(qǐng)大家務(wù)必注意。

配套代碼

GitHub:https://github.com/eacdy/spring-cloud-study/tree/master/2018-Finchley/microservice-consumer-movie-ribbon

Gitee:https://gitee.com/itmuch/spring-cloud-study/tree/master/2018-Finchley/microservice-consumer-movie-ribbon

本文首發(fā)

<http://www.itmuch.com/spring-cloud/finchley-7/&gt;

干貨分享

轉(zhuǎn)載于:https://blog.51cto.com/10180481/2339480

總結(jié)

以上是生活随笔為你收集整理的跟我学Spring Cloud(Finchley版)-07-Ribbon入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。