服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 深入ReactiveFeign:反应式远程接口调用的最佳实践

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

2023-12-26 15:15Spring全家桶实战案例源码 Java教程

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

环境: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 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) ;
}

调用结果

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

接下来会介绍更多关于反应式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。

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

超时配置

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>


原文地址:https://mp.weixin.qq.com/s/Sb2zxTF2hdlEN4UmVa0qlg

延伸 · 阅读

精彩推荐
  • Java教程解决java.lang.ClassCastException的java类型转换异常的问题

    解决java.lang.ClassCastException的java类型转换异常的问题

    这篇文章主要介绍了解决java.lang.ClassCastException的java类型转换异常的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    bdlaxx6312020-09-29
  • Java教程java打印正弦曲线示例

    java打印正弦曲线示例

    这篇文章主要介绍了java数组排序示例,需要的朋友可以参考下 ...

    java教程网4472019-11-16
  • Java教程Java开发神器Lombok安装与使用详解

    Java开发神器Lombok安装与使用详解

    Lombok的安装分两部分:Idea插件的安装和maven中pom文件的导入,本文重点给大家介绍Java开发神器Lombok安装与使用详解,感兴趣的朋友跟随小编一起看看吧...

    流楚丶格念11832022-07-28
  • Java教程Java定时器Timer使用方法详解

    Java定时器Timer使用方法详解

    这篇文章主要为大家详细介绍了Java定时器Timer的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    JMCui8842021-02-27
  • Java教程Java中的==使用方法详解

    Java中的==使用方法详解

    这篇文章主要给大家介绍了关于Java中的==使用方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    It一zhai男10872022-01-21
  • Java教程Java中的SPI机制案例分享

    Java中的SPI机制案例分享

    这篇文章主要介绍了Java中的SPI机制案例分享,文章基于Java的相关资料展开SPI的详细介绍,SPI的全称是Service Provider Interface,服务提供者接口,下文更多相关...

    CoderJie7122022-11-27
  • Java教程Java实现简单通讯录管理系统

    Java实现简单通讯录管理系统

    这篇文章主要为大家详细介绍了Java实现简单通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    菜鸟的第一天6692021-10-28
  • Java教程Java微信跳一跳操作指南

    Java微信跳一跳操作指南

    这篇文章主要为大家详细介绍了Java微信跳一跳操作指南,通过adb来控制手机进行操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    zzzzzzzzr10462021-03-15