深入ReactiveFeign:反应式远程接口调用的最佳实践
创始人
2025-07-09 17:12:02
0

环境: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. 依赖管理


  com.playtika.reactivefeign
  feign-reactor-spring-configuration
  3.3.0


  com.playtika.reactivefeign
  feign-reactor-cloud
  3.3.0


  com.playtika.reactivefeign
  feign-reactor-webclient
  3.3.0

3. 实战案例

远程接口

@GetMapping("/demos/info/{id}")
public Object info(@PathVariable("id") Integer id) throws Exception {
  TimeUnit.SECONDS.sleep(3) ;
  Map 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 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 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

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


  org.springframework.cloud
  spring-cloud-starter-circuitbreaker-reactor-resilience4j


相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...