国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

從 OpenFeign 到 RestClient:Spring Cloud 新時代的輕量化 HTTP 調(diào)用方案

開發(fā) 前端
OpenFeign 是 Spring Cloud 生態(tài)中最常用的聲明式 HTTP 客戶端,它通過?@FeignClient?注解讓開發(fā)者能像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程服務(wù)。

一、為什么要替換 OpenFeign?

1. OpenFeign 的困境

OpenFeign 是 Spring Cloud 生態(tài)中最常用的聲明式 HTTP 客戶端,它通過 @FeignClient 注解讓開發(fā)者能像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程服務(wù)。然而,隨著 Netflix OSS 停止維護(hù),F(xiàn)eign 逐漸陷入以下困境:

? 配置復(fù)雜度:當(dāng)需要為不同服務(wù)配置獨(dú)立的超時參數(shù)或編解碼規(guī)則時,不得不在啟動類堆積大量@FeignClient注解。

? 性能問題:動態(tài)代理機(jī)制在簡化開發(fā)的同時,也帶來了額外的反射開銷。通過JProfiler抽樣分析發(fā)現(xiàn),在高并發(fā)場景下約有8%的CPU時間消耗在Feign的代理邏輯上。

? 異常處理盲區(qū):默認(rèn)配置下Feign會將4xx錯誤直接封裝成FeignException拋出,需要開發(fā)者手動實(shí)現(xiàn)ErrorDecoder才能獲取原始響應(yīng)體。這種設(shè)計導(dǎo)致排查問題時總要反復(fù)查看日志鏈路,效率實(shí)在難以恭維。

因此,從 Spring Framework 6.1 開始,官方推出了全新的 RestClient,意在取代 RestTemplate、部分 WebClient,以及未來的 Feign。

二、RestClient 是什么?

RestClient 是 Spring 官方推出的新一代 HTTP 客戶端,它提供:

? 同步調(diào)用(類似 RestTemplate)

? 響應(yīng)式調(diào)用(基于 WebClient)

? 集成 Spring Cloud LoadBalancer,實(shí)現(xiàn)自動服務(wù)發(fā)現(xiàn)

? 與 Declarative HTTP Interface 結(jié)合,實(shí)現(xiàn) Feign 風(fēng)格的聲明式調(diào)用

基本使用示例

@RestController
publicclassUserController {

    privatefinalRestClientrestClient= RestClient.builder()
            .baseUrl("http://user-service")
            .build();

    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        return restClient.get()
                .uri("/users/{id}", id)
                .retrieve()
                .body(User.class);
    }
}

三、Declarative HTTP Interface:聲明式調(diào)用新時代

Spring 官方提供了新的聲明式調(diào)用方式,完全替代 Feign 的寫法:

@HttpExchange("/users")
public interface UserClient {

    @GetExchange("/{id}")
    User getUser(@PathVariable("id") Long id);

    @PostExchange
    User createUser(@RequestBody User user);
}

創(chuàng)建代理:

@Configuration
publicclassClientConfig {

    @Bean
    public UserClient userClient(RestClient.Builder builder) {
        RestClientrestClient= builder.baseUrl("http://user-service").build();
        HttpServiceProxyFactoryfactory=
                HttpServiceProxyFactory.builderFor(RestClientAdapter.create(restClient)).build();
        return factory.createClient(UserClient.class);
    }
}

這樣調(diào)用:

@RestController
publicclassTestController {

    privatefinal UserClient userClient;

    publicTestController(UserClient userClient) {
        this.userClient = userClient;
    }

    @GetMapping("/demo")
    public User demo() {
        return userClient.getUser(1L);
    }
}

四、結(jié)合 CircuitBreaker 實(shí)現(xiàn)熔斷

Spring Boot 3.x 推薦使用 Resilience4j 實(shí)現(xiàn)熔斷降級。可以直接將其與 Declarative RestClient 結(jié)合。

1. 添加依賴

<dependency>
    <groupId>io.github.resilience4j</groupId>
    <artifactId>resilience4j-spring-boot3</artifactId>
</dependency>

2. 定義熔斷包裝器

@Configuration
publicclassResilientClientConfig {

    @Bean
    public UserClient userClient(RestClient.Builder builder, CircuitBreakerRegistry registry) {
        CircuitBreakercb= registry.circuitBreaker("userServiceBreaker");
        RestClientrestClient= builder.baseUrl("http://user-service").build();

        HttpServiceProxyFactoryfactory=
                HttpServiceProxyFactory.builderFor(RestClientAdapter.create(restClient))
                        .blockTimeout(Duration.ofSeconds(2))
                        .build();

        UserClientbaseClient= factory.createClient(UserClient.class);
        return id -> cb.executeSupplier(() -> baseClient.getUser(id));
    }
}

3. 配置熔斷參數(shù)

resilience4j:
  circuitbreaker:
    instances:
      userServiceBreaker:
        slidingWindowSize: 20
        failureRateThreshold: 50
        waitDurationInOpenState: 10s

五、支持服務(wù)發(fā)現(xiàn)與負(fù)載均衡

引入 Spring Cloud LoadBalancer 后,RestClient 能像 Feign 一樣使用邏輯服務(wù)名:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
@Bean
public RestClient restClient(RestClient.Builder builder) {
    return builder.baseUrl("http://user-service").build();
}

服務(wù)名將自動通過 Nacos / Eureka 解析,無需硬編碼 IP。

六、總結(jié)

維度

OpenFeign

RestClient + Declarative HTTP Interface

是否官方維護(hù)

? Netflix 停止維護(hù)

? Spring 官方維護(hù)

性能

一般

優(yōu)秀

聲明式調(diào)用

?

?

自動發(fā)現(xiàn)

?

?

熔斷支持

?(Hystrix/Resilience4j)

?(Resilience4j)

響應(yīng)式

?

?

適配 Spring Boot 3+

?? 部分兼容

? 完全兼容

一句話總結(jié):

在 Spring Boot 3.2+ 時代,RestClient + Declarative HTTP Interface + Resilience4j 是 Feign 的完美替代方案。

七、實(shí)戰(zhàn)項(xiàng)目結(jié)構(gòu)圖

restclient-demo/
├── pom.xml
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/restclientdemo/
│   │   │       ├── controller/
│   │   │       │   └── TestController.java
│   │   │       ├── client/
│   │   │       │   ├── UserClient.java
│   │   │       │   └── ResilientClientConfig.java
│   │   │       ├── model/
│   │   │       │   └── User.java
│   │   │       └── RestclientDemoApplication.java
│   │   └── resources/
│   │       ├── application.yml
│   │       └── logback-spring.xml
│   └── test/
│       └── java/
│           └── com/example/restclientdemo/
│               └── UserClientTests.java

八、完整依賴列表(pom.xml 片段)

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot RestClient (Spring 6.1+) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webclient</artifactId>
    </dependency>

    <!-- Declarative HTTP Interface 支持 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <!-- 服務(wù)發(fā)現(xiàn)與負(fù)載均衡 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>

    <!-- 熔斷降級 Resilience4j -->
    <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-spring-boot3</artifactId>
    </dependency>

    <!-- 注冊中心(可選)Eureka 或 Nacos -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- Lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- 測試 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>


責(zé)任編輯:武曉燕 來源: JAVA日知錄
相關(guān)推薦

2024-03-08 10:05:09

SpringHTTP接口

2025-06-16 08:51:23

2021-11-16 11:45:00

SpringSpring ClouJava

2023-07-13 09:01:39

Bean接口容器

2025-01-16 11:45:26

2022-05-24 14:07:53

OpenFeignSpring開源

2023-10-13 08:52:19

遠(yuǎn)程Bean類型

2024-09-30 15:19:41

2025-04-30 02:00:00

Dify開源AI

2009-06-22 11:48:08

Spring.NET

2025-05-26 11:06:01

金蝶智能體

2020-12-04 09:30:18

HTTPWeb前端

2023-03-15 16:31:56

系統(tǒng)聲音收錄鴻蒙

2023-03-31 09:35:19

LVGL使用鴻蒙

2021-06-26 06:58:12

MPLS互聯(lián)網(wǎng)廣域網(wǎng)

2023-03-17 16:31:19

LVGL鴻蒙

2022-06-21 10:10:14

HTTP協(xié)議TCP

2011-09-27 20:07:10

芯片網(wǎng)絡(luò)

2014-11-28 13:02:23

2023-03-10 09:32:31

ANY功能短數(shù)據(jù)通信功能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

caopor在线视频| 欧美/亚洲一区| 日韩小视频在线观看专区| 天天av综合网| 亚洲女女做受ⅹxx高潮| 色综合小说天天综合网| 国产精品伦一区二区三级视频| 亚洲中文字幕久久精品无码喷水| 成人免费视频app| 日韩av新片网| 成人app下载| 国产又黄又大又粗视频| 国产无人区一区二区三区| 久久久久免费精品| 国产综合色在线观看| 亚洲国产中文字幕在线观看| 亚洲裸体视频| 色天使色偷偷av一区二区| 欧洲精品久久| 日本怡春院一区二区| 日韩精品在线视频美女| 亚洲国产福利| 亚洲欧洲国产精品| 不卡的国产精品| 奇米一区二区三区四区久久| 日本欧美视频| 日韩久久在线| 99久久婷婷国产综合精品| 久久国产精品国产精品| 欧美日韩在线免费观看| 成年人国产在线观看| 麻豆一区二区在线观看| 日韩成人免费| 日韩欧美精品一区二区| 91在线视频免费91| 含羞草激情视频| 欧美日韩在线播放三区| 欧美xnxx| 国产欧美一区二区三区久久人妖| 一区二区国产精品| 欧美日韩精品在线一区二区| 亚洲国产日产av| 2019中文字幕在线电影免费| 欧美精品激情在线| 亚洲黄色影片| 欧美黑人经典片免费观看| 午夜精品在线看| 极品在线视频| 国产精品日韩一区| 精品一区二区在线播放| 成人性a激情免费视频| 884aa四虎影成人精品一区| 久久女人天堂| 91久久精品一区二区别| 成人三级伦理片| 欧美日韩伦理片| 精品久久久av| 亚洲免费中文| 草草久视频在线观看电影资源| 欧美一区二区三区在| 欧美变态网站| 最近免费观看高清韩国日本大全| 亚洲女爱视频在线| 亚洲女同志freevdieo| 国产啪精品视频| 成人国产视频在线观看| yourporn在线观看中文站| 欧美巨大黑人极品精男| 久久一区二区三区四区五区 | 99视频这里有精品| 91免费的视频在线播放| 不卡区在线中文字幕| 啊v视频在线| 91av视频在线播放| 精品一区二区三区影院在线午夜| 激情视频免费观看在线| 久久精品视频导航| 青青草伊人久久| 久久久资源网| 97久久伊人激情网| 国产成人免费网站| 大地资源网3页在线观看| 国产v综合ⅴ日韩v欧美大片| 国产精品一区二区久久不卡| 在线a人片免费观看视频| 国产盗摄xxxx视频xxx69| 成人国产亚洲欧美成人综合网 | 国产91亚洲精品久久久| 麻豆精品蜜桃一区二区三区| 亚洲国产一二三| 日韩亚洲精品在线观看| 免费在线精品视频| 日韩女优av电影| 一区二区在线| 交视频在线观看国产| 久久久精品一区二区三区| 日本欧美加勒比视频| 福利视频在线播放| 国产精品一区二区久久精品| 久久精品人人爽人人爽| 久久免费资源| www.av毛片| 国产视频精品va久久久久久| 美女被久久久| 91在线导航| 不卡的av一区| 色久综合一二码| 欧美成人激情| av超碰在线观看| 日韩美女免费线视频| 国产精品理论片| 成人h动漫免费观看网站| 久久网站免费视频| 久久九九免费视频| 91麻豆精品在线观看| 激情久久99| 国产99久久九九精品无码| 日韩中文字幕在线播放| 成人毛片老司机大片| 国产精品美女午夜爽爽| www.xxx麻豆| 中文字幕在线看视频国产欧美在线看完整| 精品在线你懂的| 韩国美女久久| 青青青免费在线| 欧美巨大黑人极品精男| 中文字幕亚洲精品在线观看| 日韩mv欧美mv国产网站| 猫咪av永久| 97中文在线| 欧美成人aa大片| 国产乱码精品1区2区3区| www.国产精品| caoporn超碰97| 热久久美女精品天天吊色| 一区二区三区影院| 婷婷伊人综合| 中文字幕日本在线| 亚洲精品中文字幕乱码三区不卡| 日韩精品久久久久 | 欧美不卡福利| 精品黑人一区二区三区久久| 免费久久精品视频| 色综合久久久| 妞干网免费视频| 91久久精品久久国产性色也91| 色综合天天综合网国产成人综合天 | 国产精品国产三级在线观看| 嫩草av久久伊人妇女超级a| 欧美一级片久久久久久久| 天天综合色天天| 鲁大师影院一区二区三区| 超碰国产一区| 在线观看的毛片| 91热精品视频| 欧美精品一区二区三区视频| 99精品欧美一区二区三区小说 | 久久97久久97精品免视看| 国产精品久久久久久久久久免费看| 老牛精品亚洲成av人片| 在线观看国产v片| 神马欧美一区二区| 理论片在线不卡免费观看| 午夜精品爽啪视频| 男女男精品视频网| 福利片一区二区| 二人午夜免费观看在线视频| 日韩视频在线观看视频| 91福利视频网| 欧美精选在线播放| 91年精品国产| 亚洲精品2区| julia一区二区三区中文字幕| av手机天堂| 亚洲国产午夜伦理片大全在线观看网站| 尤物tv国产一区| 污片在线观看一区二区 | aa成人免费视频| 一区二区三区动漫| 亚瑟在线精品视频| 国产呦萝稀缺另类资源| 国产va免费精品观看精品视频 | 亚洲熟妇无码一区二区三区| 国产精品久久久久久久久久免费| 精品国产乱码久久| 亚洲乱码日产精品bd| 美女视频黄 久久| 欧洲grand老妇人| 黄色激情在线播放| 黄网在线播放| 在线观看三级网站| 91免费看蜜桃| 久久久亚洲国产| 精品少妇一区二区三区日产乱码 | 日韩成人在线视频观看| 亚洲三级小视频| 国产高清一区日本| 国产精品v亚洲精品v日韩精品 | 领导边摸边吃奶边做爽在线观看| 中国一级黄色录像 |