日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Spring Cloud 遠程調用 OpenFeign 這些知識點,能顛覆你的認知!

來源: 責編: 時間:2023-10-13 14:34:09 283觀看
導讀環境:SpringBoot2.7.12 + Spring Cloud2021.0.71. 概述Spring Cloud Openfeign是一種聲明式、模板化的HTTP客戶端,主要用于在Spring Cloud微服務架構中進行服務調用。相比于傳統的RestTemplate,Openfeign更加簡潔,開發者

環境:SpringBoot2.7.12 + Spring Cloud2021.0.7Rmt28資訊網——每日最新資訊28at.com

1. 概述

Spring Cloud Openfeign是一種聲明式、模板化的HTTP客戶端,主要用于在Spring Cloud微服務架構中進行服務調用。Rmt28資訊網——每日最新資訊28at.com

相比于傳統的RestTemplate,Openfeign更加簡潔,開發者只需通過編寫一個接口并添加注解進行配置,即可實現對服務提供方接口的綁定,而無需手動構造請求和解析返回數據。Rmt28資訊網——每日最新資訊28at.com

Openfeign的應用,讓Spring Cloud微服務調用變得更加便捷。在服務消費者中,只需通過接口方法即可進行遠程服務調用,就像調用本地方法一樣簡單。此外,Feign還集成了LoadBalancer,利用LoadBalancer維護服務提供方列表,實現輪詢調用服務提供者。Rmt28資訊網——每日最新資訊28at.com

使用Spring Cloud Openfeign,開發者可以更加專注于業務邏輯而不是底層的HTTP請求,提高了開發效率和代碼可讀性。同時,Openfeign還支持自定義配置和擴展,可以滿足不同場景下的需求。總之,Spring Cloud Openfeign是Spring Cloud微服務架構中不可或缺的一部分,可以幫助開發者更加高效地進行服務調用。Rmt28資訊網——每日最新資訊28at.com

2. 準備環境

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

開啟openfeign功能

@SpringBootApplication@EnableFeignClientspublic class SpringCloudComprehensiveApplication {}

feign客戶端

@FeignClient(    url = "http://localhost:8088/demos",     name = "demoService")public interface DemoFeign {  @GetMapping("/info/{id}")  public Object info(@PathVariable("id") Integer id) ;  }

以上DemoFeign就能被正確的使用了。接下來看看下面的那些知識點你是知道的Rmt28資訊網——每日最新資訊28at.com

3. 知識盲區

盲區1:超時時間

默認情況下feign調用超時時間如下:Rmt28資訊網——每日最新資訊28at.com

/** * 默認超時時間 * <ul> * <li>Connect Timeout: 10 seconds</li> * <li>Read Timeout: 60 seconds</li> * <li>Follow all 3xx redirects</li> * </ul> */public Options() {  this(10, TimeUnit.SECONDS, 60, TimeUnit.SECONDS, true);}

定義

public class FeignClientFactoryBean {  // 讀超時時間  private int readTimeoutMillis = new Request.Options().readTimeoutMillis();  // 連接超時時間  private int connectTimeoutMillis = new Request.Options().connectTimeoutMillis();}

編程方式自定義:你只需要提供Request.Options類型的Bean即可。Rmt28資訊網——每日最新資訊28at.com

配置定義

#全局定義feign.client.config.default.connect-timeout=3000feign.client.config.default.read-timeout=3000#具體服務定義feign.client.config.demoService.connect-timeout=2000feign.client.config.demoService.read-timeout=2000

盲區2:重試

feign的重試相信很多人都沒有玩過對吧?Rmt28資訊網——每日最新資訊28at.com

如果feign沒有啟用斷路器功能(feign.circuitbreaker.enabled, 默認值為false),那么會開啟retryer(重試)功能;默認情況openfeign提供了如下配置:Rmt28資訊網——每日最新資訊28at.com

@Bean@Scope("prototype")@ConditionalOnMissingBeanpublic Feign.Builder feignBuilder(Retryer retryer) {  return Feign.builder().retryer(retryer);}// 默認還是個不支持重試的,所以我們需要自定義重試Bean@Bean@ConditionalOnMissingBeanpublic Retryer feignRetryer() {  return Retryer.NEVER_RETRY;}

自定義重試bean

@Beanpublic Retryer feignRetryer() {  Retryer.Default retryer = new Retryer.Default(100, SECONDS.toMillis(1), 2);  return retryer ;}

這樣如果當前環境沒有cricuitbreaker,那么這里的重試就能生效了。Rmt28資訊網——每日最新資訊28at.com

盲區3:服務降級

通常定義了feign客戶端后,我們都會定義相應的降級服務,fallback或fallbackFactory,如果這兩個都配置了那誰才會生效呢?源碼如下:Rmt28資訊網——每日最新資訊28at.com

class FeignCircuitBreakerTargeter implements Targeter {  public <T> T target(FeignClientFactoryBean factory, Feign.Builder feign, FeignContext context,      Target.HardCodedTarget<T> target) {    // ...    FeignCircuitBreaker.Builder builder = (FeignCircuitBreaker.Builder) feign;    String name = !StringUtils.hasText(factory.getContextId()) ? factory.getName() : factory.getContextId();    // 先判斷了fallback屬性,如果不是void,那么直接返回了    Class<?> fallback = factory.getFallback();    if (fallback != void.class) {      return targetWithFallback(name, context, target, builder, fallback);    }    Class<?> fallbackFactory = factory.getFallbackFactory();    if (fallbackFactory != void.class) {      return targetWithFallbackFactory(name, context, target, builder, fallbackFactory);    }    return builder(name, builder).target(target);  }}

盲區4:primary屬性

在@FeignClient注解中有個primary屬性,你知道這個屬性有什么用嗎?Rmt28資訊網——每日最新資訊28at.com

默認每一個feign客戶端都被注冊為bean,并且每個bean都相當于使用了@Primary注解修飾一樣,任何地方注入都是有限注入的該bean。它的用處還得從fallback屬性說起。如果定義了feign客戶端后對應的fallback是需要實現當前這個feign接口的,且還的注冊為bean對象。那么如果把這里的primary設置為false后,容器中此時可是存在兩個DemoFeign類型的bean的,這時候容器啟動就會報錯了。所以這里默認就吧feign客戶端的primary設置為true就是解決這個問題的。示例如下:Rmt28資訊網——每日最新資訊28at.com

@FeignClient(    url = "http://localhost:8088/demos",     name = "demoService",     fallback = DemoFeignFallback.class    primary = true // 默認即為true)public interface DemoFeign {}@Componentpublic class DemoFeignFallback implements DemoFeign {}

盲區5:動態刷新超時時間

盲區1中已經提到了超時時間問題,那都是寫靜態配置,那能不能動態配置呢?可以,完全可以,你只需下面這樣操作即可Rmt28資訊網——每日最新資訊28at.com

#開啟刷新配置feign.client.refresh-enabled=true

實現的原理也比較簡單就是:向容器中注冊了一個OptionsFactoryBean類型的bean且該Bean的作用域范圍是refresh。當我們調用/refresh endpoint后就會刷新該Bean的配置信息。Rmt28資訊網——每日最新資訊28at.com

先就列出上面5個知識點吧,看看你知道幾個?Rmt28資訊網——每日最新資訊28at.com

完畢!!!Rmt28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-13489-0.htmlSpring Cloud 遠程調用 OpenFeign 這些知識點,能顛覆你的認知!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Java設計規范與代碼風格:保持代碼的一致性與可讀性

下一篇: NET序列化工具:SharpSerializer庫快速上手并輕松完成序列化操作

標簽:
  • 熱門焦點
  • 7月安卓手機性能榜:紅魔8S Pro再奪榜首

    7月份的手機市場風平浪靜,除了紅魔和努比亞帶來了兩款搭載驍龍8Gen2領先版處理器的新機之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機廠商修整的時間,進入8月份之
  • 服務存儲設計模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數據從主存儲加載到KV緩存中,加速后續的訪問。在存在重復度的場景,Cache-Aside可以提升服務性能,降低底層存儲的壓力,缺點是緩存和底
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • 三萬字盤點 Spring 九大核心基礎功能

    大家好,我是三友~~今天來跟大家聊一聊Spring的9大核心基礎功能。話不多說,先上目錄:圖片友情提示,本文過長,建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個核心的基礎功能,不
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • AI芯片初創公司Tenstorrent獲三星和現代1億美元投資

    Tenstorrent是一家由芯片行業資深人士Jim Keller領導的加拿大初創公司,專注于開發人工智能芯片,該公司周三表示,已經從現代汽車集團和三星投資基金等
  • 機構稱Q2全球智能手機出貨量同比下滑11% 蘋果份額依舊第2

    7月20日消息,據外媒報道,研究機構的報告顯示,由于需求下滑,今年二季度全球智能手機的出貨量,同比下滑了11%,三星、蘋果等主要廠商的銷量,較去年同期均有下
  • 電博會上海爾智家模擬500平大平層,還原生活空間沉浸式體驗

    電博會為了更好地讓參展觀眾真正感受到智能家居的絕妙之處,海爾智家的程傳嶺先生同樣介紹了展會上海爾智家的模擬500平大平層,還原生活空間沉浸式體驗。程傳
Top 主站蜘蛛池模板: 遂昌县| 伊川县| 礼泉县| 会昌县| 来宾市| 中西区| 长岭县| 鄱阳县| 武夷山市| 兴和县| 淳化县| 广昌县| 新宾| 莱州市| 牟定县| 沁水县| 衡阳市| 昌吉市| 多伦县| 饶河县| 新竹县| 肃北| 呼玛县| 新丰县| 荥阳市| 大竹县| 桐梓县| 达州市| 沙坪坝区| 南丹县| 乐清市| 依安县| 陇南市| 新龙县| 绥宁县| 嘉义市| 黄山市| 海原县| 巢湖市| 南开区| 城口县|