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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ribbon、Feign、OpenFeign、spring-cloud-openfeign的区别

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ribbon、Feign、OpenFeign、spring-cloud-openfeign的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、 Ribbon

隨著服務注冊中心的安裝完成后,客戶端的負載均衡和服務的調用又是我們關注的話題。Ribbon可以實現客戶端的負載均衡,

  • 負載均衡LB

LoadBalance(負載均衡):簡單的說就是將用戶的請求平攤的分配到多個服務器上,從而達到系統的HA(高可用)。常見的負載均衡工具有nginx、LVS,硬件上F5等

  • 集中式LB

即在服務的消費方和提供方之間使用獨立的LB設施,可以是硬件F5、也可以是軟件nginx、LVS等,提供該設施將請求通過某種策略發送給服務提供方

  • 進程內LB

將LB邏輯集成到消費方,消費方從服務注冊中心查找服務列表,然后獲取服務地址根據某種規則選出合適的服務器。Ribbon就是進程內LB,它只是一個類庫,集成于消費方進程,消費者通過它來獲取到服務提供方的地址

SpringCloud Ribbon是基于Netflix Ribbon實現的一套客戶端的負載均衡工具,主要功能是提供了客戶端的軟件負載均衡算法和服務調用。Ribbon客戶端組件提供了一系列完善的配置項例如連接超時、重試等。Ribbon目前也進入了維護模式

  • Ribbon 是 Netflix開源的基于HTTP和TCP等協議負載均衡組件
  • Ribbon 可以用來做客戶端負載均衡,調用注冊中心的服務
  • Ribbon的使用需要代碼里手動調用目標服務,請參考官方示例:https://github.com/Netflix/ribbon

  • Nginx是服務器端的負載均衡,客戶端的所有請求都會交給nginx,由nginx分發到各個服務器上。即負載均衡是由服務端實現的

  • Ribbon是本地的負載均衡,在調用微服務接口的時候,會在注冊中心上獲取注冊服務信息列表之后緩存到JVM本地,從而在本地實現RPC遠程服務調用的技術

    • 基于Ribbon的服務調用(必須結合RestTemplate)
  • 項目中引入依賴
  • <!--引入ribbon依賴--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
  • 使用restTemplate + ribbon進行服務調用的方式
    • 使用discovery client 進行客戶端調用
    • 使用loadBalanceClient 進行客戶端調用
    • 使用@loadBalanced 進行客戶端調用
    • 使用discovery Client形式調用
    @Autowired private DiscoveryClient discoveryClient; //獲取服務列表 List<ServiceInstance> products = discoveryClient.getInstances("服務ID"); for (ServiceInstance product : products) {log.info("服務主機:[{}]",product.getHost());log.info("服務端口:[{}]",product.getPort());log.info("服務地址:[{}]",product.getUri());log.info("===================================="); }
    • 使用loadBalance Client形式調用
    @Autowired private LoadBalancerClient loadBalancerClient; //根據負載均衡策略選取某一個服務調用 ServiceInstance product = loadBalancerClient.choose("服務ID");//地址 輪詢策略 log.info("服務主機:[{}]",product.getHost()); log.info("服務端口:[{}]",product.getPort()); log.info("服務地址:[{}]",product.getUri());
    • 使用@loadBalanced
    //1.整合restTemplate + ribbon 這里會有緩存,若有機器宕機,一開始可能還會調用到,當心跳檢測完成后,刷新緩存就可以 @Bean @LoadBalanced public RestTemplate getRestTemplate(){return new RestTemplate(); } //2.調用服務位置注入RestTemplate @Autowired private RestTemplate restTemplate; //3.調用 String forObject = restTemplate.getForObject("http://服務ID/hello/hello?name=" + name, String.class);
  • Ribbon負載均衡策略
    • RoundRobinRule 輪訓策略 按順序循環選擇 Server
    • RandomRule 隨機策略 隨機選擇 Server
    • AvailabilityFilteringRule 可用過濾策略
      會先過濾由于多次訪問故障而處于斷路器跳閘狀態的服務,還有并發的連接數量超過閾值的服務,然后對剩余的服務列表按照輪詢策略進行 訪問
    • WeightedResponseTimeRule 響應時間加權策略
      根據平均響應的時間計算所有服務的權重,響應時間越快服務權重越大被選中的概率越高,剛啟動時如果統計信息不足,則使用
      RoundRobinRule策略,等統計信息足夠會切換到
    • RetryRule 重試策略
      先按照RoundRobinRule的策略獲取服務,如果獲取失敗則在制定時間內進行重試,獲取可用的服務。
    • BestAviableRule 最低并發策略
      會先過濾掉由于多次訪問故障而處于斷路器跳閘狀態的服務,然后選擇一個并發量最小的服務

    需要注意的是:目前ribbon已經停止了維護

    二、Feign

  • Feign是Spring Cloud組件中的一個輕量級RESTful的HTTP服務客戶端
  • Feign內置了Ribbon,用來做客戶端負載均衡,去調用服務注冊中心的服務。
  • Feign的使用方式是:使用Feign的注解定義接口,調用這個接口,就可以調用服務注冊中心的服務

    Feign支持的注解和用法請參考官方文檔:https://github.com/OpenFeign/feign

    Feign本身不支持Spring MVC的注解,它有一套自己的注解

    Feign是Spring Cloud組件中的一個輕量級Restful的HTTP服務客戶端,Feign內置了Ribbon,用來做客戶端的負載均衡,去調用服務注冊中心的服務。Feign的使用方式是:使用Feign的注解接口,調用這個接口,就可以調用服務注冊中心的服務

    三、OpenFeign

    而OpenFeign則是可以讓我們像調用Dubbo接口一樣,實現面向接口編程OpenFeign是Spring Cloud 在Feign的基礎上支持了Spring MVC的注解,如@RequesMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通過動態代理的方式產生實現類,實現類中做負載均衡并調用其他服務。

    OpenFeign是重點,會重寫一篇文章

    四、feign、openfeign、spring-cloud-openfeign的區別聯系

  • feign三個相關的 Maven 依賴
  • <!-- https://mvnrepository.com/artifact/com.netflix.feign/feign-core --> <dependency><groupId>com.netflix.feign</groupId><artifactId>feign-core</artifactId><version>8.18.0</version> </dependency><!-- https://mvnrepository.com/artifact/io.github.openfeign/feign-core --> <!-- https://github.com/OpenFeign/feign --> <dependency><groupId>io.github.openfeign</groupId><artifactId>feign-core</artifactId><version>10.5.1</version> </dependency><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign --> <!-- https://spring.io/projects/spring-cloud-openfeign --> <!-- https://github.com/spring-cloud/spring-cloud-openfeign --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.1.2.RELEASE</version> </dependency>
  • 三者都是Feign,但是有所區別
  • 為什么存在“com.netflix.feign:feign-core”和“io.github.openfeign:feign-core”? 區別?

    一句話總結:由于 Netflix 公司不再維護feign,feign由社區維護,feign更名為 openfeign,并且項目遷移到新的倉庫。后續版本僅使用 “io.github.openfeign”,推薦使用該依賴。

    spring-cloud-openfeign 和 openfeign 有什么關系?

    spring-cloud-openfeign 是基于 openfeign 進行包裝,集成了 SpringMVC 的注解等方便SpringBoot項目開發的一個組件。

    參考文章1
    參考文章2

    總結

    以上是生活随笔為你收集整理的Ribbon、Feign、OpenFeign、spring-cloud-openfeign的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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