当前位置:首页 > 科技  > 软件

高并发下就该使用非阻塞式方式接口调用提高系统整体性能

来源: 责编: 时间:2023-09-25 10:38:17 235观看
导读简介OpenFeign是Spring Cloud的一部分,它基于Feign实现了声明式服务调用和负载均衡。以下是OpenFeign的一些主要特性:支持SpringMVC的注解:OpenFeign整合了SpringMVC的注解,例如@RequestMapping,使得用户可以直接在接口上

简介

OpenFeign是Spring Cloud的一部分,它基于Feign实现了声明式服务调用和负载均衡。以下是OpenFeign的一些主要特性:3US28资讯网——每日最新资讯28at.com

  1. 支持SpringMVC的注解:OpenFeign整合了SpringMVC的注解,例如@RequestMapping,使得用户可以直接在接口上使用这些注解,而无需编写接口实现。
  2. 负载均衡:OpenFeign通过动态代理的方式生成实现类,这些实现类中包含了负载均衡的实现,并可以调用其他服务。
  3. 声明式服务调用:OpenFeign提供了一种声明式的方式来访问远程服务,这使得使用者可以像调用本地方法一样来调用远程服务。
  4. 可插拔的注解:OpenFeign提供了可插拔的注解支持,这意味着用户可以根据自己的需要选择不同的注解来使用。
  5. 异步通信:OpenFeign支持异步通信,这使得用户可以更好地利用异步请求带来的优势。
  6. 熔断器:OpenFeign可以与resilience4j集成,支持熔断器的功能,这可以在服务调用失败时保护系统,防止故障扩散。
  7. 服务发现:OpenFeign可以与nacos, loadbalancer配合使用,支持服务发现的功能及负载均衡,这使得用户可以更加方便地管理和调用远程服务。

总的来说,OpenFeign是一个功能强大的声明式服务调用和负载均衡工具,它可以提高服务调用的效率和灵活性,并可以帮助用户更好地管理他们的分布式系统。3US28资讯网——每日最新资讯28at.com

但是OpenFeign并不支持反应式客户端,如Spring WebClient,Spring Cloud OpenFeign也不支持。3US28资讯网——每日最新资讯28at.com

feign-reactor是Spring Cloud的feign的扩展,它提供了对Reactor Netty的支持,可以更好地处理HTTP请求。具体来说,feign-reactor基于Reactor Netty实现,它支持Reactive编程模型,可以更好地处理异步请求,并且可以更好地利用网络资源。此外,feign-reactor还提供了一些其他的特性,例如:支持负载均衡、支持熔断器、支持自定义请求和响应等。3US28资讯网——每日最新资讯28at.com

总的来说,feign-reactor可以提升feign在处理HTTP请求时的效率和灵活性。3US28资讯网——每日最新资讯28at.com

使用上基本与openfeign一致,就是将相应的注解换了相应的名称。3US28资讯网——每日最新资讯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的支持。3US28资讯网——每日最新资讯28at.com

feign-reactor-webclient依赖提供了有关WebClient客户端相关的实现及配置。3US28资讯网——每日最新资讯28at.com

feign-reactor-spring-configuration依赖提供了Spring自动配置。3US28资讯网——每日最新资讯28at.com

开启反应式客户端

@SpringBootApplication// 这里与openfeign就是名称不一样@EnableReactiveFeignClientspublic 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是保持一致的。3US28资讯网——每日最新资讯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) ;  }  }

图片图片3US28资讯网——每日最新资讯28at.com

成功调用目标接口3US28资讯网——每日最新资讯28at.com

超时支持

超时配置,我们只需要提供配置即可3US28资讯网——每日最新资讯28at.com

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

以上是默认配置,对所有的接口都是一样的超时时间。3US28资讯网——每日最新资讯28at.com

由于目标接口模拟了耗时操作,所以调用了回退接口由于目标接口模拟了耗时操作,所以调用了回退接口3US28资讯网——每日最新资讯28at.com

为具体接口配置超时

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

编程方式

也可以直接通过编程的方式3US28资讯网——每日最新资讯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() ;  }  }

完毕!!!3US28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-11247-0.html高并发下就该使用非阻塞式方式接口调用提高系统整体性能

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Go 语言史诗级更新-循环Bug修复

下一篇: 分布式微服务架构中的关键技术解析

标签:
  • 热门焦点
Top
Baidu
map