精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

全網最詳細的OpenFeign講解,肯定有你不知道的

開發 開發工具
OpenFeign是一個非常有用的工具,它為開發者提供了一種簡單而強大的方式來處理遠程服務調用。通過使用OpenFeign,開發者可以專注于業務邏輯,而無需花費太多精力在復雜的網絡編程細節上。

環境:SpringCloud3.1.5

1. 簡介

Spring Cloud OpenFeign是一種聲明式、模板化的HTTP客戶端,它簡化了遠程調用的編程體驗。在Spring Cloud中使用OpenFeign,開發者可以像調用本地方法一樣使用HTTP請求訪問遠程服務,而無需感知這是在調用遠程方法。

OpenFeign會根據帶有注解的函數信息構建出網絡請求的模板,在發送網絡請求之前,OpenFeign會將函數的參數值設置到這些請求模板中。

在項目啟動階段,OpenFeign框架會自動的掃包流程,從指定的目錄下掃描并加載所有被@FeignClient注解修飾的接口。OpenFeign會針對每一個FeignClient接口生成一個動態代理(JDK)對象,這個動態代理對象會被添加到Spring上下文中,并注入到對應的服務里。

總的來說,Spring Cloud OpenFeign是一種強大的工具,它可以幫助開發者更輕松地實現微服務的遠程調用。

2. OpenFeign配置

2.1 開啟功能

引入依賴

groupId: org.springframework.cloud
artifactId: spring-cloud-starter-openfeign

開啟

@SpringBootApplication
@EnableFeignClients
public class DemoApplication {
  public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
  }
}

示例

@FeignClient(name = "demoService")
public interface DemoFeign {


  @GetMapping("/info/{id}")
  public Object info(@PathVariable("id") Integer id) ;


}

在 @FeignClient 注解中,name="demoService"是一個客戶端名稱,用于創建 Spring Cloud LoadBalancer 客戶端。你也可以設置 url 屬性(絕對值或主機名)指定一個 URL。

2.2 自定義配置

通過指定@FeignClient  configuration屬性實現自定義配置

@FeignClient(name = "demoService", configuration=DemoConfiguration.class)
public interface DemoFeign {
}

默認情況下Spring Cloud OpenFeign會提供如下的默認Bean:

Decoder feignDecoder:ResponseEntityDecoder  響應內容解碼

Encoder feignEncoder: SpringEncoder

Logger feignLogger: Slf4jLogger

MicrometerCapability micrometerCapability: 如果 feign-micrometer 位于類路徑上,且 MeterRegistry 可用

CachingCapability cachingCapability: 如果使用 @EnableCaching 注解。可通過 feign.cache.enabled 關閉。

Contract feignContract: SpringMvcContract這個的作用就是用來接下@FeignClient注解類中的相應MVC注解

Feign.Builder feignBuilder: FeignCircuitBreaker.Builder構建Feign客戶端的,比如環境中使用了CircuitBreaker,那么就會在調用接口時應用斷路器功能

Client feignClient: 如果 Spring Cloud LoadBalancer 位于類路徑上,則使用 FeignBlockingLoadBalancerClient。如果它們都不在類路徑上,則使用默認的 Feign  Client。默認的Client使用jdk自定的網絡請求 URLConnection。

我們可以在自定義的DemoConfiguration中自定義自己的實現,在DemoConfiguration中你可以自定義如下的Bean:注意:這些bean是 OpenFeign沒有提供的,除了上面介紹的你可以覆蓋自定義實現,你還可以定義下面的bean

Logger.Level
Retryer
ErrorDecoder
Request.Options
Collection<RequestInterceptor>
SetterFactory
QueryMapEncoder
Capability (MicrometerCapability and CachingCapability are provided by default)

接下來會介紹常用的一些自定義配置

  • 動態配置name & url
@FeignClient(name = "${pack.demo.name}", url="${pack.demo.url}")
public interface DemoFeign {
}

配置文件

pack:
  demo:
    name: demoService
    url: http://localhost:8088/demos

  • 超時配置
feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 5000

默認所有的接口請求超時都是5s。

  • 動態設置超時時間

如果啟用了 Feign 客戶端刷新,則每個 Feign 客戶端都會以 feign.Request.Options 作為 refresh-scoped Bean 來創建。這意味著 connectTimeout 和 readTimeout 等屬性可以通過 POST /actuator/refresh 針對任何 Feign 客戶端實例進行刷新。值需要進行如下配置接口

feign:
  client:
    refresh-enabled: true

  • 自定義日志級別

配置文件中設置

logging:
  level:
    '[com.pack.feign.test.DemoFeign]': debug

配置日志基本,兩種方式:1 配置文件;2 定義Bean

feign:
  client:
    config:
      demoService:
        logger-level: full

在自定義配置類中定義為bean

@Bean
public Logger.Level loggerLevel() {
  return Logger.Level.FULL ;
}

  • 自定義重試機制

默認情況下,當請求的接口出現異常不會進行重試,可以通過定義下面bean進行重試

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

  • 自定義攔截器

默認OpenFeign不提供任何攔截器,如果你需要在請求前進行處理,比如添加請求header,那么你可以自定義攔截器實現

@Bean
public RequestInterceptor headerRequestInterceptor() {
  return template -> {
    template.header("X-API-TOKEN", "666666") ;
  } ;
}

也可以通過配置文件配置

feign:
  client:
    config:
      demoService:
        request-interceptors:
        - com.pack.feign.HeaderRequestInterceptor

  • 手動創建Feign客戶端

在某些情況下,可能需要自定義 Feign 客戶端,你可以使用 Feign Builder API 創建客戶端。下面的示例創建了兩個具有相同接口的 Feign Client,但每個客戶端都配置了單獨的請求攔截器。

public class DemoController {


  private DemoFeign demoFeign ;


  @Autowired
  public DemoController(Client client, Encoder encoder, Decoder decoder) {
    this.fooClient = Feign.builder().client(client)
        .encoder(encoder)
        .decoder(decoder)
        .requestInterceptor(new HeaderRequestInterceptor("X-API-TOKEN", "666666"))
        .target(FooClient.class, "http://localhost:8088/demos");
  }
}

  • 服務降級

當你的類路徑下有了Spring Cloud CircuitBreaker后服務降級fallback才會生效。

@FeignClient(
    url = "http://localhost:8088/demos", 
    name = "demoService", 
    configuration = DemoFeignConfiguration.class,
    fallback = DemoFeignFallback.class
)
public interface DemoFeign {


  @GetMapping("/info/{id}")
  public Object info(@PathVariable("id") Integer id) ;


}

服務降級類必須實現對應FeignClient的接口

public class DemoFeignFallback implements DemoFeign {


  public Object info(Integer id) {
    return "default - " + id;
  }
}

  • 服務降級工廠

如果需要訪問觸發回退的原因,可以使用 @FeignClient 內的 fallbackFactory 屬性。

@FeignClient(
    url = "http://localhost:8088/demos", 
    name = "demoService", 
    configuration = DemoFeignConfiguration.class,
    fallbackFactory = DemoFeignFallbackFactory.class,
)
public interface DemoFeign {


  @GetMapping("/info/{id}")
  public Object info(@PathVariable("id") Integer id) ;


}

工廠類

public class DemoFeignFallbackFactory implements FallbackFactory<DemoFeignFallback> {


  static class DemoFeignFallback implements DemoFeign {


    private Throwable cause ;


    public DemoFeignFallback(Throwable cause) {
      this.cause = cause ;
    }


    @Override
    public Object info(Integer id) {
      return "接口調用異常 - " + this.cause.getMessage() ;
    }


  }


  @Override
  public DemoFeignFallback create(Throwable cause) {
    return new DemoFeignFallback(cause) ;
  }
}

  • 緩存支持

如果使用 @EnableCaching 注解,則會創建并注冊一個 CachingCapability Bean,以便 Feign 客戶端識別其接口上的 @Cache* 相關注解:

@FeignClient(
    url = "http://localhost:8088/demos", 
    name = "demoService", 
    configuration = DemoFeignConfiguration.class,
    fallbackFactory = DemoFeignFallbackFactory.class,
)
public interface DemoFeign {


  @GetMapping("/info/{id}")
  @Cacheable(cacheNames = "demo-cache", key = "#id")
  public Object info(@PathVariable("id") Integer id) ;
}

  • Feign繼承支持

Feign 通過單繼承接口支持模板應用程序。這樣就可以將常用操作歸類到方便的基礎接口中。

@FeignClient(
    url = "http://localhost:8088/users", 
    name = "userService"
)
public interface UserService {


  @GetMapping("/{id}")
  User getUser(@PathVariable("id") Long id) ;
}
@FeignClient("users")
public interface UserClient extends UserService {
}

注意:@FeignClient 接口不應在服務器和客戶端之間共享,并且不再支持在類級使用 @RequestMapping 對 @FeignClient 接口進行注解。

  • 請求相應壓縮

你可以考慮為你的 Feign 請求啟用請求或響應 GZIP 壓縮。你可以啟用其中一個屬性:

feign: 
  compression: 
    request
      enabled: true
    response:
      enabled: true

控制壓縮MeidaType類型和最小請求閾值長度

feign:
  compression: 
    request:
      mime-types: text/xml,application/xml,application/json
      min-request-size: 2048

3. 關于響應式客戶端

由于 OpenFeign 項目目前不支持 Spring WebClient 等反應式客戶端,因此 Spring Cloud OpenFeign 也不支持反應式客戶端。

目前官方推薦的響應式庫:feign-reactive

<dependency>
  <groupId>com.playtika.reactivefeign</groupId>
  <artifactId>feign-reactor-webclient</artifactId>
  <version>3.3.0</version>
</dependency>

我目前使用的是3.3.0版本,除了注解適當調整,其它使用基本一致,非常爽。

@ReactiveFeignClient(
    url = "http://localhost:8088/demos", 
    name = "demoReactorFeign", 
    fallback = DemoReactorFeignFallback.class,
    configuration = {DemoReactorFeignConfig.class}
)
public interface DemoReactorFeign {
  @GetMapping("/info/{id}")
  public Mono<Object> info(@PathVariable("id") Integer id) ;
}

總結:

OpenFeign是一個非常有用的工具,它為開發者提供了一種簡單而強大的方式來處理遠程服務調用。通過使用OpenFeign,開發者可以專注于業務邏輯,而無需花費太多精力在復雜的網絡編程細節上。

OpenFeign的聲明式編程風格使得我們能夠以一種高度抽象和簡潔的方式與遠程服務進行交互,它簡化了網絡請求的構建和發送過程,降低了開發的復雜度。

總的來說,Spring Cloud OpenFeign是一個強大而靈活的工具,它可以幫助開發者更高效地構建和維護微服務應用。通過使用OpenFeign,我們可以更好地專注于業務邏輯,而無需擔心網絡調用的實現細節。

完畢!!!

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2023-11-15 08:22:42

Java開發小技巧

2023-12-13 08:28:07

2018-09-02 15:43:56

Python代碼編程語言

2021-08-30 07:49:33

索引ICP Mysql

2023-09-08 08:23:29

Servlet程序MVC

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2024-10-21 17:46:54

前端開發

2025-03-17 00:45:00

JavaScriptAPI頁面

2025-05-21 14:08:47

2009-12-10 09:37:43

2022-10-13 11:48:37

Web共享機制操作系統

2021-02-01 23:23:39

FiddlerCharlesWeb

2011-09-15 17:10:41

2010-08-23 09:56:09

Java性能監控

2020-10-15 17:35:22

PandasPython開發

2025-05-08 08:59:19

前端技巧

2025-08-18 02:22:00

前端技巧代碼

2025-11-10 01:11:00

前端工具代碼API

2022-11-04 08:19:18

gRPC框架項目
點贊
收藏

51CTO技術棧公眾號

日本成年人网址| 国产精品99久久99久久久二8| 欧美视频国产视频| 国产黄a三级三级三级av在线看| 欧美aⅴ一区二区三区视频| 亚洲一二三在线| 亚洲免费黄色录像| 先锋影音在线资源站91| 成人国产在线观看| 欧美专区第一页| 超碰人人人人人人人| 麻豆久久一区| 五月婷婷综合在线| 日韩偷拍一区二区| 国产免费黄色网址| 宅男噜噜噜66国产日韩在线观看| 亚洲欧美激情在线视频| 少妇一级淫免费播放| 性网站在线观看| 高清国产一区二区三区| 欧美壮男野外gaytube| 国产18无套直看片| 99ri日韩精品视频| 在线观看欧美日本| 欧美一区二区视频在线播放| 蝌蚪视频在线播放| 国产一区三区三区| 欧美激情一区二区三区高清视频 | 国产精品一区二区三区美女| 色琪琪一区二区三区亚洲区| 400部精品国偷自产在线观看| 天堂在线资源库| 精品亚洲国内自在自线福利| 欧美精品久久久久久久免费观看 | 91成人app| 精品成人久久av| 国产免费一区二区三区四在线播放| 天天操天天操天天干| 激情深爱一区二区| 日本久久久久久久久久久| 朝桐光av在线| 日韩精品中文字幕第1页| 亚洲国产精品电影| 久久精品一卡二卡| 456成人影院在线观看| 国产精品女同互慰在线看| 国产精品日韩一区二区| 在线观看亚洲国产| 美女久久一区| 97国产在线视频| 国产av 一区二区三区| 国产真实有声精品录音| 亚洲剧情一区二区| 久久福利小视频| 亚洲三级av| 欧美日韩一区精品| 99免费视频观看| 不卡专区在线| 亚洲午夜久久久久久久久久久| 影音先锋亚洲视频| 成人av电影观看| 久久久亚洲精品一区二区三区| 国产精品一区二区欧美| 精品人妻无码一区二区| 国产一区二区毛片| 成人a视频在线观看| 国产亚洲久一区二区| 日韩精品乱码免费| 日本电影亚洲天堂| 在线观看日本网站| 久久综合狠狠| 第一区第二区在线| 综合在线观看色| 一区二区三区四区在线视频| 国产露出视频在线观看| 成年人午夜久久久| 精品国产一区二区三区麻豆免费观看完整版| 国产成人三级在线播放 | 久久众筹精品私拍模特| 国产一区二区三区四区hd| 亚洲av无码一区二区三区dv| 福利91精品一区二区三区| 国产免费亚洲高清| 国产精品乱码一区二区| 黄页视频在线91| 99porn视频在线| 少妇性l交大片| 成人黄色免费短视频| 欧美日韩激情一区| 中国男女全黄大片| 嫩草影视亚洲| 久久亚洲影音av资源网| xxxxxx国产| 亚洲一区二区三区四区五区午夜| 国产成人精品免费视频| 国产免费无遮挡| 99re亚洲国产精品| 一区二区三区av在线| 色噜噜狠狠狠综合欧洲色8| 免费在线毛片| 美女一区二区三区在线观看| www日韩av| 狠狠v欧美ⅴ日韩v亚洲v大胸| 18成人在线观看| 夫妻免费无码v看片| av成人免费| 亚洲黄色av女优在线观看| www久久久久久久| 亚洲毛片播放| 91精品在线看| 风间由美一区| 午夜亚洲福利老司机| 自拍偷拍21p| 日韩成人动漫在线观看| 美女av一区二区| 国产精品传媒在线观看| 成人国产在线观看| 中文字幕超清在线免费观看| 亚洲色图官网| 精品sm在线观看| 少妇aaaaa| 蜜臀av一区二区三区| 精品国产一区二区三区免费| 美女隐私在线观看| 日本电影亚洲天堂一区| 精品人妻在线视频| 婷婷激情图片久久| 国产成人在线播放| 亚洲精品一区二区三区四区| 国产精品成人免费精品自在线观看| 免费看的黄色大片| 爱爱精品视频| 九九九热精品免费视频观看网站| 波多野结衣在线观看一区| 懂色av一区二区三区免费观看| 亚洲精品第一区二区三区| 黑人巨大精品| 亚洲精品电影在线观看| 亚洲熟女www一区二区三区| 久久激五月天综合精品| 亚洲va久久久噜噜噜久久狠狠| 免费在线不卡av| 草莓视频成人appios| 91精品国产91久久久久久最新毛片| 国产美女免费网站| 久久香蕉精品| 日本不卡一区二区三区视频| 暖暖成人免费视频| 亚洲人成电影网站色www| wwwxxx亚洲| 97久久精品人人做人人爽50路| 日韩黄色短视频| 久久草在线视频| 91高清免费在线观看| 天天综合网在线观看| 激情亚洲一区二区三区四区 | 国产视频91在线| 成人av高清在线| 免费无遮挡无码永久视频| 日韩有码一区| 国产精品pans私拍| 国产女主播在线直播| 欧美主播一区二区三区美女| 亚洲天堂精品一区| 国产一区在线不卡| 青春草国产视频| 亚洲动漫精品| 国产精品网址在线| 欧美性videos| 日韩欧美电影一区| 日韩av在线天堂| 久久嫩草精品久久久精品| 日本男人操女人| 婷婷亚洲综合| 国产精品毛片va一区二区三区| 国产剧情av在线播放| 国产亚洲精品美女| 国产精品国产三级国产aⅴ| 亚洲精选免费视频| 久久人妻少妇嫩草av无码专区 | 国产精品嫩草影院在线看| 国产精品免费一区| 在线你懂的视频| 日韩精品久久久久久久玫瑰园| 精品黑人一区二区三区| 日韩毛片高清在线播放| 少妇献身老头系列| 亚洲欧美日韩国产综合精品二区| eeuss鲁片一区二区三区在线观看| 国产精品无码乱伦| 精品视频一区二区三区| 91av在线免费观看| 四虎久久免费| 亚洲精品国产精品乱码不99按摩| 午夜一区二区三区四区| 亚洲综合丁香婷婷六月香| 国产伦精品一区二区三区妓女| 奇米四色…亚洲| 成年人网站国产| 日韩综合在线| 精品综合久久| 激情不卡一区二区三区视频在线 | 国产精品av一区二区三区| www.亚洲免费视频| 手机福利小视频在线播放| 欧美久久久久免费| 日韩一区二区视频在线| 日韩一区在线播放| 无码人妻精品一区二区三区温州| 久久99精品网久久| 2022亚洲天堂| 欧美午夜影院| 裸体裸乳免费看| 国际精品欧美精品| 精品国产一区二区三区麻豆小说| 国产午夜亚洲精品一级在线| 欧美一级在线播放| 国产偷倩在线播放| 久久精品成人欧美大片| 久久久pmvav| 精品处破学生在线二十三| 99久久亚洲精品日本无码 | 欧美成人手机在线| av在线日韩国产精品| 日韩乱码在线视频| 日本精品一区二区在线观看| 欧美一区二区三区喷汁尤物| 免费在线不卡av| 在线亚洲免费视频| 五月天综合激情网| 天天操天天色综合| 中文字幕第28页| 亚洲精品视频自拍| 艳妇荡乳欲伦69影片| 国产精品视频在线看| 91成人在线免费视频| 97久久久精品综合88久久| 黄色在线免费播放| 成人污污视频在线观看| 国产成人精品一区二区三区在线观看| 国精品**一区二区三区在线蜜桃| 国产高清视频网站| 日韩电影在线观看一区| 黄色一级大片在线观看| 久久精品九九| 可以免费观看av毛片| 久久国产免费| 激情五月亚洲色图| 三级欧美在线一区| 韩国日本美国免费毛片| 视频在线观看一区| 日本激情视频在线| 全国精品久久少妇| 在线免费视频一区| 国产在线一区二区| 波多野结衣在线免费观看| 国产综合色在线视频区| 亚洲综合20p| 国产69精品一区二区亚洲孕妇| 久久久久亚洲av无码网站| 国产91丝袜在线播放九色| 欧美一级片在线免费观看| 国产+成+人+亚洲欧洲自线| 国产一级黄色录像| 久久免费视频色| 熟女少妇内射日韩亚洲| 国产精品久久看| 中文字幕av播放| 亚洲国产欧美另类丝袜| 精品人妻无码一区二区性色| 欧美中文字幕久久| 国产影视一区二区| 精品福利视频一区二区三区| 天天摸天天碰天天爽天天弄| 亚洲免费福利视频| 伊人免费在线| 欧美黄色片免费观看| 电影在线观看一区| 国产精品日韩精品| 日本精品在线播放| 美女精品国产| 99久久亚洲精品蜜臀| www.av蜜桃| 美女视频一区在线观看| 国产ts在线观看| 久久久www成人免费毛片麻豆| 91香蕉视频污在线观看| 一区二区三区四区高清精品免费观看 | jizz18欧美18| 欧洲一区二区日韩在线视频观看免费| 99精品在线观看| 成人一对一视频| 久久99久久精品| 亚洲欧美视频在线播放| 国产精品理论片| 男女视频免费看| 制服丝袜亚洲播放| 日本私人网站在线观看| 久久国产一区二区三区| 中文字幕21页在线看| 亚洲www在线| 欧美丝袜激情| 免费看又黄又无码的网站| 久久国产剧场电影| 亚洲第一黄色网址| 亚洲乱码中文字幕| 少妇又紧又色又爽又刺激视频| 亚洲福利在线播放| 国产写真视频在线观看| 国产97在线|日韩| 福利电影一区| 激情图片qvod| 美女一区二区久久| 亚洲午夜久久久久久久久红桃| 一区二区三区在线看| 在线免费观看一级片| 亚洲精品一区在线观看香蕉| 羞羞的视频在线看| 国产欧美一区二区三区久久| 美女亚洲一区| 黄色免费视频大全| 高清在线成人网| 国产这里有精品| 欧美日韩精品电影| 中文字幕91视频| sdde在线播放一区二区| 成人黄色片免费| 国内外成人在线视频| 国产又黄又粗视频| 色综合视频在线观看| 免费观看黄色av| 久久久久久久久久久国产| 国产精品一区二区美女视频免费看 | 亚洲免费视频二区| 亚洲视频一区二区三区| 欧美办公室脚交xxxx| 国产精品青青草| 亚洲乱码久久| 精品熟女一区二区三区| 亚洲国产视频一区二区| 国内精品偷拍视频| 欧美日韩成人免费| 国产视频一区二区在线播放| 国产精品h视频| 国产综合色产在线精品| 欧美性x x x| 日韩欧美在线影院| 婷婷色在线播放| 成人91视频| 99av国产精品欲麻豆| 性欧美成人播放77777| 日韩欧美在线观看视频| 国产小视频免费在线观看| 国产成人综合久久| 欧美综合视频| 中文字幕亚洲影院| 亚洲精品精品亚洲| 国产18精品乱码免费看| 97在线免费观看视频| 米奇777超碰欧美日韩亚洲| av网址在线观看免费| 国产欧美日韩激情| 亚洲天堂手机版| 欧美精品日韩三级| 久久97精品| 国产精品wwwww| 国产精品亲子乱子伦xxxx裸| 96日本xxxxxⅹxxx17| 欧美日韩xxxxx| 一本色道久久综合狠狠躁的番外| 大香煮伊手机一区| 国产精品久久久久久久岛一牛影视| 91一区二区视频| 性欧美办公室18xxxxhd| 精品国产成人| 日本黄色三级网站| 欧美色videos| 日本中文字幕在线播放| 99久久精品久久久久久ai换脸| 亚洲另类自拍| 日韩欧美视频免费观看| 日韩免费视频一区| 亚洲精品国产精品国产| 日日噜噜噜夜夜爽爽| 不卡的看片网站| 中文字幕视频一区二区| 欧美肥婆姓交大片| 国产欧美日韩在线一区二区 | 国产综合精品视频| 日韩在线一区二区三区免费视频| 日韩精品一区二区三区中文字幕| 黄色av网址在线播放| 国产精品久久久久永久免费观看| 性欧美8khd高清极品| 91亚洲男人天堂| 中文字幕xxx| 欧美一区二区三区白人| 亚洲精品成人图区| 久久久99精品视频| 久久久久久毛片|