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

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

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.767W28資訊網——每日最新資訊28at.com

1. 概述

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

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

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

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

3. 知識盲區

盲區1:超時時間

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

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

盲區3:服務降級

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

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

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 6月安卓手機性價比榜:Note 12 Turbo斷層式碾壓

    6月份有一個618,雖然這是京東周年慶的日子,但別的電商也都不約而同的跟進了,反正促銷沒壞處,廠商和用戶都能滿意。618期間一些產品也出現了歷史低價,那么各個價位段的產品性價比
  • 5月iOS設備好評榜:iPhone 14僅排第43?

    來到新的一月,安兔兔的各個榜單又重新匯總了數據,像安卓陣營的榜單都有著比較大的變動,不過iOS由于設備的更新換代并沒有那么快,所以相對來說變化并不大,特別是iOS好評榜,老款設
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之&ldquo;想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!&rdquo;曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 網傳小米汽車開始篩選交付中心 建筑面積不低于3000平方米

    7月7日消息,近日有微博網友@長三角行健者爆料稱,據經銷商集團反饋,小米汽車目前已經開始了交付中心的篩選工作,要求候選場地至少有120個車位,建筑不能低
  • 三星Galaxy Z Fold5官方渲染圖曝光:13.4mm折疊厚度依舊感人

    據官方此前宣布,三星將于7月26日在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • 首發天璣9200+ iQOO Neo8系列發布首銷售價2299元起

    2023年5月23日晚,iQOO Neo8系列正式發布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro強悍登場,限時售價3099元起;價位段最強性能手機iQOO Neo8同期上市
Top 主站蜘蛛池模板: 淄博市| 大渡口区| 崇礼县| 新竹县| 陆川县| 竹山县| 高雄市| 河西区| 海阳市| 天气| 宁远县| 滁州市| 五台县| 泰兴市| 黑龙江省| 龙岩市| 邵阳市| 乐安县| 庆云县| 嘉义市| 谢通门县| 钟山县| 光山县| 中江县| 安乡县| 旌德县| 微博| 洛宁县| 金溪县| 个旧市| 长葛市| 轮台县| 页游| 三亚市| 山阳县| 巫溪县| 太湖县| 林甸县| 赫章县| 孟连| 小金县|