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

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

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

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

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

1. 概述

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

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

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

使用Spring Cloud Openfeign,開發者可以更加專注于業務邏輯而不是底層的HTTP請求,提高了開發效率和代碼可讀性。同時,Openfeign還支持自定義配置和擴展,可以滿足不同場景下的需求。總之,Spring Cloud Openfeign是Spring Cloud微服務架構中不可或缺的一部分,可以幫助開發者更加高效地進行服務調用。fWi28資訊網——每日最新資訊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就能被正確的使用了。接下來看看下面的那些知識點你是知道的fWi28資訊網——每日最新資訊28at.com

3. 知識盲區

盲區1:超時時間

默認情況下feign調用超時時間如下:fWi28資訊網——每日最新資訊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即可。fWi28資訊網——每日最新資訊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的重試相信很多人都沒有玩過對吧?fWi28資訊網——每日最新資訊28at.com

如果feign沒有啟用斷路器功能(feign.circuitbreaker.enabled, 默認值為false),那么會開啟retryer(重試)功能;默認情況openfeign提供了如下配置:fWi28資訊網——每日最新資訊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,那么這里的重試就能生效了。fWi28資訊網——每日最新資訊28at.com

盲區3:服務降級

通常定義了feign客戶端后,我們都會定義相應的降級服務,fallback或fallbackFactory,如果這兩個都配置了那誰才會生效呢?源碼如下:fWi28資訊網——每日最新資訊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屬性,你知道這個屬性有什么用嗎?fWi28資訊網——每日最新資訊28at.com

默認每一個feign客戶端都被注冊為bean,并且每個bean都相當于使用了@Primary注解修飾一樣,任何地方注入都是有限注入的該bean。它的用處還得從fallback屬性說起。如果定義了feign客戶端后對應的fallback是需要實現當前這個feign接口的,且還的注冊為bean對象。那么如果把這里的primary設置為false后,容器中此時可是存在兩個DemoFeign類型的bean的,這時候容器啟動就會報錯了。所以這里默認就吧feign客戶端的primary設置為true就是解決這個問題的。示例如下:fWi28資訊網——每日最新資訊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中已經提到了超時時間問題,那都是寫靜態配置,那能不能動態配置呢?可以,完全可以,你只需下面這樣操作即可fWi28資訊網——每日最新資訊28at.com

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 半導體需求下滑 三星電子DS業務部門今年營業虧損預計超10萬億韓元

    7月17日消息,據外媒報道,去年下半年開始的半導體需求下滑,影響到了三星電子、SK海力士、英特爾等諸多廠商,營收明顯下滑,部分廠商甚至出現了虧損。作為
  • 2299元起!iQOO Pad明晚首銷:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其最大的賣點
  • iQOO Neo8 Pro即將開售:到手價3099元起 安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
  • iQOO Neo8 Pro真機諜照曝光:天璣9200+和V1+旗艦雙芯加持

    去年10月,iQOO推出了iQOO Neo7系列機型,不僅搭載了天璣9000+,而且是同價位唯一一款天璣9000+直屏旗艦,一經上市便受到了用戶的廣泛關注。在時隔半年后,
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續還將開展常態化登記。  北京科技教育體驗基
Top 主站蜘蛛池模板: 栾川县| 江西省| 永康市| 龙州县| 石门县| 察哈| 汉中市| 桑植县| 贞丰县| 怀远县| 宁南县| 昭苏县| 扎兰屯市| 田东县| 宽甸| 专栏| 武隆县| 宁国市| 华亭县| 神农架林区| 府谷县| 内丘县| 错那县| 吉安市| 阿克陶县| 武宁县| 九江县| 冷水江市| 东平县| 逊克县| 神池县| 微山县| 宁蒗| 郸城县| 当涂县| 天门市| 镇远县| 寿宁县| 潼南县| 磐安县| 防城港市|