深入ReactiveFeign:反应式远程接口调用的最佳实践

开发 前端
Feign-reactive是一个非常有用的框架,可以帮助开发人员轻松地实现响应式微服务,提高应用程序的性能和吞吐量。

环境:SpringBoot2.7.15

1. 简介

Feign-reactive是一个用于在Spring Cloud应用程序中实现响应式微服务的框架。它支持在Spring Cloud应用程序中实现异步和非阻塞的远程调用。Feign-reactive的一些主要特点:

  1. 基于Feign的简洁风格:Feign-reactive继承了Feign的简洁风格,使得在编写基于微服务架构的应用程序时,可以更加方便地实现异步编程。
  2. 支持Reactive编程模型:Feign-reactive提供对Reactive编程模型的支持,使得在编写异步和非阻塞的代码时更加容易。
  3. 异步和非阻塞远程调用:通过Feign-reactive,可以轻松地实现异步和非阻塞的远程调用,从而提高应用程序的响应速度和吞吐量。
  4. 与Spring Cloud集成:Feign-reactive与Spring Cloud集成,使得可以在Spring Cloud应用程序中方便地使用Feign-reactive实现响应式微服务。
  5. 可扩展性:Feign-reactive具有可扩展性,可以根据需要添加自定义的拦截器、编码器和解码器等。

Feign-reactive是一个非常有用的框架,可以帮助开发人员轻松地实现响应式微服务,提高应用程序的性能和吞吐量。

2. 依赖管理

<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>

3. 实战案例

远程接口

@GetMapping("/demos/info/{id}")
public Object info(@PathVariable("id") Integer id) throws Exception {
  TimeUnit.SECONDS.sleep(3) ;
  Map<String, Object> result = new HashMap<>() ;
  result.put("code", 0) ;
  result.put("data", id) ;
  result.put("message", "success") ;
  return result ;
}

开启反应式功能

@EnableReactiveFeignClients
public class AppFeignReactorApplication {}

基于反应式的Feign接口定义

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

以上就完成了一个非常简单的反应式feign接口定义,接下来就可以使用了。其实这里除了注解与openfeign不一样外,其它都一样。

测试调用

@Resource
private DemoReactorFeign demoReactorFeign ;


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

调用结果

图片

接下来会介绍更多关于反应式feign的配置

配置降级

@ReactiveFeignClient(
    url = "http://localhost:8088/demos", 
    name = "demoReactorFeign", 
    fallback = DemoReactorFeignFallback.class,
    configuration = {DemoReactorFeignConfig.class}
)
public interface DemoReactorFeign {

降级接口定义

public class DemoReactorFeignFallback implements DemoReactorFeign {


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


}

自定义配置

public class DemoReactorFeignConfig {


  @Bean
  public DemoReactorFeignFallback demoReactorFeignFallback() {
    return new DemoReactorFeignFallback() ;
  }
  
}

当远程接口调用失败或超时将会执行上面的fallback。

图片图片

超时配置

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

负载均衡配置

reactive:
  feign:
    loadbalancer:
      enabled: true

断路器配置

reactive:
  feign:
    circuit:
      breaker:
       enabled: true

要使其生效,必须引入下面的依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-circuitbreaker-reactor-resilience4j</artifactId>
</dependency>


责任编辑:武晓燕 来源: Spring全家桶实战案例源码
相关推荐

2022-08-15 09:00:00

JavaScript前端架构

2021-12-05 23:37:21

Java9异步编程

2023-08-31 16:47:05

反应式编程数据流

2022-03-29 07:32:38

R2DBC数据库反应式

2011-08-30 11:19:25

远程服务器数据中心迁移服务器管理工具

2024-01-31 08:26:44

2023-09-21 08:01:27

SpringR2DBC实现数据库

2016-11-17 13:39:19

数据中心远程管理自动化网络

2021-03-04 11:06:05

自助服务

2023-11-29 09:00:55

ReactuseMemo

2024-01-09 07:25:31

2023-09-13 08:00:00

JavaScript循环语句

2015-09-15 16:01:40

混合IT私有云IT架构

2016-12-27 08:49:55

API设计策略

2018-10-24 11:01:53

分布式存储系统

2023-07-21 01:12:30

Reactfalse​变量

2011-08-18 11:05:21

jQuery

2022-07-07 08:00:00

VDI虚拟化虚拟桌面

2013-05-22 15:29:28

微软云计算微软公有云Windows Azu

2011-07-26 10:03:11

ITIL实施ITIL流程认证
点赞
收藏

51CTO技术栈公众号