如何将阻塞的伪装客户转换为反应性伪装客户

时间:2019-08-29 15:50:26

标签: spring-cloud-feign feign

简介
1.我们有很多Spring微服务,一些完全是响应式的(spring-webflux)和一些旧式的(spring-web)。
2.我们使用Feign在微服务中将API(和客户端)定义为接口,并在我们的控制器中实现它们。
3.每个微服务可能对这两种类型都具有依赖性。

目标
为了防止代码重复,请基于普通的Feign客户端生成Reactive Feign客户端(反之亦然)。

问题
我已经开发了一个(PoC)Maven插件,该插件可以读取Feign接口并生成具有相同签名但具有反应性返回类型的Reactive接口。
1.这是一个愚蠢的主意吗?如果是这样,我该怎么办才能在没有代码重复的情况下为我们的客户提供这两种技术的支持?
2.市场上可以使用任何工具/解决方案吗? (还是我应该继续使用我的Maven插件?)

1 个答案:

答案 0 :(得分:1)

伪装包括简单的Reactive streams support,该伪装允许使用响应式返回类型。该库将方法执行包装在Reactive包装器中。它不是“一直向下的反应式”,方法执行仍处于阻塞状态,但可以集成到现有的反应式执行链中。

要使用提供的库,请将其包含为依赖项:

<dependency>
   <groupId>io.github.openfeign</groupId>
   <artifactId>feign-reactive-wrappers</artifactId>
   <version>10.4.0</version>
</dependency>

并为所需的反应流实现使用适当的构建器,支持Reactor和RxJava2 +。

public class ExampleReactor {
  public static void main(String args[]) {
    GitHubReactor gitHub = ReactorFeign.builder()      
      .target(GitHubReactor.class, "https://api.github.com");

    List<Contributor> contributors = gitHub.contributors("OpenFeign", "feign")
      .collect(Collectors.toList())
      .block();
  }
}

您可以使用此库来开始。我们的路线图包括在不久的将来的全面反应支持。