成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

高并發下就該使用非阻塞式方式接口調用提高系統整體性能

開發 開發工具
總的來說,OpenFeign是一個功能強大的聲明式服務調用和負載均衡工具,它可以提高服務調用的效率和靈活性,并可以幫助用戶更好地管理他們的分布式系統。

簡介

OpenFeign是Spring Cloud的一部分,它基于Feign實現了聲明式服務調用和負載均衡。以下是OpenFeign的一些主要特性:

  1. 支持SpringMVC的注解:OpenFeign整合了SpringMVC的注解,例如@RequestMapping,使得用戶可以直接在接口上使用這些注解,而無需編寫接口實現。
  2. 負載均衡:OpenFeign通過動態代理的方式生成實現類,這些實現類中包含了負載均衡的實現,并可以調用其他服務。
  3. 聲明式服務調用:OpenFeign提供了一種聲明式的方式來訪問遠程服務,這使得使用者可以像調用本地方法一樣來調用遠程服務。
  4. 可插拔的注解:OpenFeign提供了可插拔的注解支持,這意味著用戶可以根據自己的需要選擇不同的注解來使用。
  5. 異步通信:OpenFeign支持異步通信,這使得用戶可以更好地利用異步請求帶來的優勢。
  6. 熔斷器:OpenFeign可以與resilience4j集成,支持熔斷器的功能,這可以在服務調用失敗時保護系統,防止故障擴散。
  7. 服務發現:OpenFeign可以與nacos, loadbalancer配合使用,支持服務發現的功能及負載均衡,這使得用戶可以更加方便地管理和調用遠程服務。

總的來說,OpenFeign是一個功能強大的聲明式服務調用和負載均衡工具,它可以提高服務調用的效率和靈活性,并可以幫助用戶更好地管理他們的分布式系統。

但是OpenFeign并不支持反應式客戶端,如Spring WebClient,Spring Cloud OpenFeign也不支持。

feign-reactor是Spring Cloud的feign的擴展,它提供了對Reactor Netty的支持,可以更好地處理HTTP請求。具體來說,feign-reactor基于Reactor Netty實現,它支持Reactive編程模型,可以更好地處理異步請求,并且可以更好地利用網絡資源。此外,feign-reactor還提供了一些其他的特性,例如:支持負載均衡、支持熔斷器、支持自定義請求和響應等。

總的來說,feign-reactor可以提升feign在處理HTTP請求時的效率和靈活性。

使用上基本與openfeign一致,就是將相應的注解換了相應的名稱。

環境準備

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>


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

feign-reactor-cloud依賴提供了CircuitBreaker + LoadBalancer的支持。

feign-reactor-webclient依賴提供了有關WebClient客戶端相關的實現及配置。

feign-reactor-spring-configuration依賴提供了Spring自動配置。

開啟反應式客戶端

@SpringBootApplication
// 這里與openfeign就是名稱不一樣
@EnableReactiveFeignClients
public class SpringcloudFeignReactorApplication {
}

reactor feign接口定義

@ReactiveFeignClient(
    // 目標地址
    url = "http://localhost:8088/demos", 
    // 這里沒有走服務發現機制,隨意
    name = "demoReactorFeign", 
    // 回退;當發生異常或超時調用,這里與openfeign一樣都需要實現當前feign接口
    fallback = DemoReactorFeignFallback.class,
    // 配置
    configuration = {DemoReactorFeignConfig.class}
)
public interface DemoReactorFeign {


  // 下面這個注解是feign的注解
  // @RequestLine("GET /info/{id}")
  // feign中@PathVariable => @Param
  // 基于SpringMVC的注解
  @GetMapping("/info/{id}")
  public Mono<Object> info(@PathVariable("id") Integer id) ;
  
}

回退類定義

public class DemoReactorFeignFallback implements DemoReactorFeign {


  @Override
  public Mono<Object> info(Integer id) {
    return Mono.just("請求失敗") ;
  }


}

配置類

// 這里沒有添加@Configuration注解,不需要,不過添加了也可以,只是可能會出現問題
public class DemoReactorFeignConfig {


  // 配置上面的回退類
  @Bean
  public DemoReactorFeignFallback demoReactorFeignFallback() {
    return new DemoReactorFeignFallback() ;
  }
  
}

以上對feign reactor的使用除了類不一樣外,其它都與openfeign是保持一致的。

測試接口

@RestController
@RequestMapping("/reactor")
public class DemoController {


  @Resource
  private DemoReactorFeign demoReactorFeign ;
  
  @GetMapping("/{id}")
  public Object info(@PathVariable("id") Integer id) {
    return this.demoReactorFeign.info(id) ;
  }
  
}

圖片圖片

成功調用目標接口

超時支持

超時配置,我們只需要提供配置即可

reactive:
  feign:
    client:
      config:
        default:
          options: 
            connectTimeoutMillis: 1000
            readTimeoutMillis: 1000

以上是默認配置,對所有的接口都是一樣的超時時間。

由于目標接口模擬了耗時操作,所以調用了回退接口由于目標接口模擬了耗時操作,所以調用了回退接口

為具體接口配置超時

reactive:
  feign:
    client:
      config:
        demoReactorFeign:
          options:
            connectTimeoutMillis: 2000
            readTimeoutMillis: 2000

編程方式

也可以直接通過編程的方式

public class ProgramReactorFeignMain {


  @Headers({ "Accept: application/json" })
  static interface DemoReactorFeign {


    @RequestLine("GET /info/{id}")
    public Mono<Object> info(@Param("id") Integer id) ;
    
  }
  
  public static void main(String[] args) throws Exception {
    DemoReactorFeign target = 
        WebReactiveFeign                  //  WebClient based reactive feign  
        //JettyReactiveFeign              //  Jetty http client based
        //Java11ReactiveFeign             //  Java 11 http client based
        .<DemoReactorFeign>builder()      //  指定方法返回值參數化類型
        .target(DemoReactorFeign.class, "http://localhost:8088/demos") ;
    target.info(6666).doOnNext(System.out::println).block() ;
  }
  
}

完畢!!!

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

2023-09-28 08:01:06

MySQL事務失效

2017-01-15 09:56:48

LinuxIO性能

2010-02-22 10:38:44

Web交換技術

2010-01-05 13:59:22

網吧交換機

2020-11-24 20:54:17

數據

2014-06-12 19:53:08

達夢DMETLETL

2011-12-21 17:12:07

2023-10-06 16:56:19

Python二進制工具

2016-11-28 09:08:43

java系統異步非阻塞

2020-04-10 10:10:28

Nginx高并發性能

2019-10-30 16:54:08

golangredis數據庫

2024-08-05 11:34:49

2025-02-20 00:01:00

2020-09-23 22:36:27

分布式架構系統

2020-07-15 08:14:12

高并發

2025-02-26 08:20:18

2014-08-08 13:30:44

Nginx

2013-01-30 10:12:24

NginxNginx優化高并發

2025-03-21 06:20:00

連接池系統數據庫

2024-02-02 11:24:00

I/O高并發場景
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久里面有精品 | 天天弄 | 成人福利片 | 日韩欧美在线一区二区 | 亚洲国产精品一区二区三区 | 国产精品久久久久久一级毛片 | 一区二区三区在线免费观看视频 | 亚洲性视频网站 | 日日摸日日添日日躁av | 九色 在线| 亚洲午夜精品视频 | 欧美一区二 | 亚洲高清一区二区三区 | 久久久www成人免费无遮挡大片 | 精品综合在线 | 伊人精品久久久久77777 | 亚洲情侣视频 | 久久久久国产精品一区二区 | 国产成人综合网 | 成人在线精品视频 | 黄色一级大片在线免费看产 | 久久久久网站 | 亚洲福利一区二区 | 国产亚洲精品久久久久久豆腐 | 国产一区二区精 | 精品美女 | 亚洲视频二区 | a级免费黄色片 | 99伊人| 国产成人免费视频网站高清观看视频 | 日韩视频一区二区在线 | 日本电影韩国电影免费观看 | 91日日| 99精品视频一区二区三区 | 成人免费一区二区三区视频网站 | 人干人人 | 国产精品国产成人国产三级 | 在线成人一区 | 日韩精品一区二区三区中文在线 | 日韩欧美三区 | 欧美精品久久久 |