AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

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

來源: 責編: 時間:2023-09-25 10:38:17 296觀看
導讀簡介OpenFeign是Spring Cloud的一部分,它基于Feign實現了聲明式服務調用和負載均衡。以下是OpenFeign的一些主要特性:支持SpringMVC的注解:OpenFeign整合了SpringMVC的注解,例如@RequestMapping,使得用戶可以直接在接口上

簡介

OpenFeign是Spring Cloud的一部分,它基于Feign實現了聲明式服務調用和負載均衡。以下是OpenFeign的一些主要特性:mbe28資訊網——每日最新資訊28at.com

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

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

但是OpenFeign并不支持反應式客戶端,如Spring WebClient,Spring Cloud OpenFeign也不支持。mbe28資訊網——每日最新資訊28at.com

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

總的來說,feign-reactor可以提升feign在處理HTTP請求時的效率和靈活性。mbe28資訊網——每日最新資訊28at.com

使用上基本與openfeign一致,就是將相應的注解換了相應的名稱。mbe28資訊網——每日最新資訊28at.com

環境準備

<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的支持。mbe28資訊網——每日最新資訊28at.com

feign-reactor-webclient依賴提供了有關WebClient客戶端相關的實現及配置。mbe28資訊網——每日最新資訊28at.com

feign-reactor-spring-configuration依賴提供了Spring自動配置。mbe28資訊網——每日最新資訊28at.com

開啟反應式客戶端

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

reactor feign接口定義

@ReactiveFeignClient(    // 目標地址    url = "http://localhost:8088/demos",     // 這里沒有走服務發現機制,隨意    name = "demoReactorFeign",     // 回退;當發生異?;虺瑫r調用,這里與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是保持一致的。mbe28資訊網——每日最新資訊28at.com

測試接口

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

圖片圖片mbe28資訊網——每日最新資訊28at.com

成功調用目標接口mbe28資訊網——每日最新資訊28at.com

超時支持

超時配置,我們只需要提供配置即可mbe28資訊網——每日最新資訊28at.com

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

以上是默認配置,對所有的接口都是一樣的超時時間。mbe28資訊網——每日最新資訊28at.com

由于目標接口模擬了耗時操作,所以調用了回退接口由于目標接口模擬了耗時操作,所以調用了回退接口mbe28資訊網——每日最新資訊28at.com

為具體接口配置超時

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

編程方式

也可以直接通過編程的方式mbe28資訊網——每日最新資訊28at.com

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() ;  }  }

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

本文鏈接:http://www.tebozhan.com/showinfo-26-11247-0.html高并發下就該使用非阻塞式方式接口調用提高系統整體性能

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

上一篇: Go 語言史詩級更新-循環Bug修復

下一篇: 分布式微服務架構中的關鍵技術解析

標簽:
  • 熱門焦點
Top