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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

spring cloud生态中Feign、Ribbon、loadbalancer的一些历史

發(fā)布時間:2023/12/24 windows 45 coder
生活随笔 收集整理的這篇文章主要介紹了 spring cloud生态中Feign、Ribbon、loadbalancer的一些历史 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

背景

本意是想寫個feign中l(wèi)oadbalancer組件和nacos相遇后,一個兼容相關(guān)的問題,后面發(fā)現(xiàn)Feign這套東西很深,想一篇文章寫清楚很難,就先開一篇,講歷史。

Feign、OpenFeign、Spring Cloud OpenFeign

Feign

Feign是Java生態(tài)中的一個庫,這個庫的官方目標是:Feign makes writing Java http clients easier,大概就是讓http接口調(diào)用更加容易。

查了下歷史,最早是Netflix家的,坐標如下,16年發(fā)布了最后一個版本后停止維護:

<!-- https://mvnrepository.com/artifact/com.netflix.feign/feign-core -->
<dependency>
    <groupId>com.netflix.feign</groupId>
    <artifactId>feign-core</artifactId>
</dependency>

OpenFeign

2016年,Netflix將其捐贈給社區(qū),改名OpenFeign,目前還一直在維護:

<dependency>
    <groupId>io.github.openfeig</groupId>
    <artifactId>feign-core</artifactId>
</dependency>

Spring Cloud OpenFeign

而Spring Cloud OpenFeign則是對Feign的集成,讓Feign能更方便地在spring項目中使用。

項目主頁:https://spring.io/projects/spring-cloud-openfeign#learn

Spring cloud這塊有兩個坐標,一個是用于集成改名前的Feign,最早的版本是2015年,目前,這個坐標早就標記為過期了,提示使用另一個: Spring Cloud Starter Feign (deprecated, please use spring-cloud-starter-openfeign)

https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-feign
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
    <version>1.0.0.RELEASE</version>
</dependency>

另一個則是集成改名后的OpenFeign,最早的版本是2017年11月20日,目前一直在維護,算是spring cloud中的核心組件:

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>1.4.0.RELEASE</version>
</dependency>

值得一提的是,不管是哪一個坐標,都是在第一個版本中,就已經(jīng)依賴了ribbon這個組件,ribbon主要負責客戶端負載均衡,因為根據(jù)服務(wù)名從服務(wù)注冊中心會拿到很多實例,具體調(diào)用哪一個,就得靠ribbon這個組件來選擇其中一個,比如隨機、輪詢等算法:

spring-cloud-starter-openfeign:

詳情可參考文章:https://juejin.cn/post/7097124836496900127

Feign使用示例

在feign中,比如要調(diào)用github的兩個接口,只需要向下面這樣定義好接口:

interface GitHub {
  @RequestLine("GET /repos/{owner}/{repo}/contributors")
  List<Contributor> contributors(@Param("owner") String owner, @Param("repo") String repo);

  @RequestLine("POST /repos/{owner}/{repo}/issues")
  void createIssue(Issue issue, @Param("owner") String owner, @Param("repo") String repo);
}

調(diào)用就像下面這樣:

// 發(fā)起調(diào)用,調(diào)用第一個接口
GitHub github = Feign.builder().target(GitHub.class, "https://api.github.com");
List<Contributor> contributors = github.contributors("OpenFeign", "feign");

可以看出,它的思路就是簡潔,就像調(diào)用普通的方法一樣,不用考慮序列化、反序列化、流的打開和關(guān)閉、異常處理。

ribbon、spring cloud loadbalancer

我應(yīng)該是18/19年開始在項目里使用spring cloud,那時候的版本,還是spring cloud Netflix那一套,eureka + feign(ribbon) + hystrix斷路器 + zuul網(wǎng)關(guān)那一套,ribbon是由OpenFeign默認引入的。

后來,Netflix宣布不再維護后,這一套中的組件,慢慢被替代。

前兩年在鵝廠沒搞spring cloud這一套,現(xiàn)在再搞這一套的時候,各個組件已經(jīng)變天了。

在我們這,目前是,eureka變成了nacos,feign(ribbon)變成了feign(spring cloud loadbalancer),hystrix變成了sentinel,zuul網(wǎng)關(guān)變成了spring cloud gateway。

其中,feign是比較有意思的,之前的默認負載均衡組件是ribbon,但是ribbon因為也是Netflix家的,不再維護后,spring官方自己搞了個spring cloud loadbalancer。

spring cloud openfeign是從什么時候開始支持自家的loadbalancer呢?我翻了下歷史,在2.1.5.RELEASE版本,都還只有ribbon(https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign/2.1.5.RELEASE)

下一個版本是2.2.0.RELEASE,已經(jīng)開始支持loadbalancer了(https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign/2.2.0.RELEASE)。

當然,ribbon也還是支持的,只是多了個選擇。

spring cloud loadbalancer的最早版本也就是2.2.0.RELEASE,想必就是為了和openfeign的版本保持一致。

ribbon落幕

我發(fā)現(xiàn),OpenFeign目前主要有幾個大版本。

2.2.x(從2.2.0.RELEASE到從2.2.10.RELEASE),這個版本都是有ribbon的,當然也有l(wèi)oadbalancer;

3.0.x,該版本是不帶ribbon的,只有l(wèi)oadbalancer;

3.1.x,4.0.x,4.1.x,都是不帶ribbon的,只有l(wèi)oadbalancer。

理清歷史有什么用

理清歷史,可以讓你對項目中的依賴和配置項更有掌控。

比如,ribbon和loadbalancer只需要一個就夠了,沒必要共存,那你會說,我肯定不會兩個依賴同時引入。

沒錯,但是ribbon可能作為如下依賴的間接依賴被引入:

<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.9.RELEASE</version>
</dependency>

也就是說,nacos服務(wù)發(fā)現(xiàn)的2.2.x系列,默認引入ribbon。

這樣的話,你就可以排除掉多余的。

但你如果用的是nacos的2021.0.x系列,則它已經(jīng)自己排除了ribbon系列,只支持loadbalancer了,就不需要手動排除了。

我就說我們有個項目很奇怪,為啥要手動排除ribbon:

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
            </exclusions>
        </dependency>

我才發(fā)現(xiàn),是項目的nacos服務(wù)發(fā)現(xiàn)坐標,從當時的2.2.x,升級到了:2021.0.5.0。我就說,排除個啥呀,本來都沒這個依賴。

另外,之前還需要手動禁用ribbon:

spring:
  cloud:
    loadbalancer:
      ribbon:
        enabled: false

沒理清楚這個歷史前,我還不敢去掉這段配置,現(xiàn)在呢,直接刪了就是。

這里,總結(jié)一下,就是說,如果項目里ribbon和loadbalancer共存,首先,這是沒啥必要的,其次,共存情況下要使用loadbalancer,則還是需要上面這段禁用ribbon的配置的。

參考文章

這篇是loadbalancer誕生的簡介。

https://spring.io/blog/2020/03/25/spring-tips-spring-cloud-loadbalancer

https://baijiahao.baidu.com/s?id=1662947934543573780

總結(jié)

以上是生活随笔為你收集整理的spring cloud生态中Feign、Ribbon、loadbalancer的一些历史的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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