Reactivate-Feign 是 Spring Cloud Feign 的一个扩展项目,它提供了对响应式编程的支持。响应式编程是一种编程范式,主要用于处理异步数据流。在传统的编程模型中,通常使用回调函数或 Future/Promise 来处理异步操作,而在响应式编程中,则使用流(Stream)来表示数据流,并提供了丰富的操作符来处理这些数据流。
Reactivate-Feign 增加了对 Project Reactor 库的集成,Project Reactor 是 Spring Framework 5 中引入的一个响应式编程库,它提供了 Mono 和 Flux 这两种类型来表示异步的响应式流。
Reactivate-Feign 的主要特性包括:
-
返回响应式类型: 在使用 Feign 客户端进行服务间通信时,Reactivate-Feign 可以将方法的返回类型从传统的阻塞式类型(例如 ResponseEntity)转换为响应式类型(例如 Mono 或 Flux),从而支持异步响应式编程。
-
异步操作处理: 通过响应式类型,可以在请求发送和响应接收时都能够以非阻塞的方式进行处理,从而提高系统的并发性能和吞吐量。
-
丰富的操作符支持: Reactivate-Feign 提供了丰富的操作符,可以在响应式流上进行各种操作,例如 map、flatMap、filter 等,使得数据流的处理更加灵活和方便。
-
与 Spring Cloud 集成: Reactivate-Feign 可以与 Spring Cloud 很好地集成,可以在 Spring Cloud 应用中直接使用,并与 Ribbon(负载均衡)和 Hystrix(容错)等组件一起使用。
通过引入 Reactivate-Feign,可以使得在使用 Feign 进行服务间通信时能够更好地利用响应式编程的优势,从而提高系统的性能和可伸缩性。
注意:启动类添加下面两个注解
@EnableDiscoveryClient
@EnableReactiveFeignClients(basePackages = {"com.test.client"})
1、引用Maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-reactor-resilience4j</artifactId>
<version>2.1.6</version>
</dependency>
<dependency>
<groupId>com.playtika.reactivefeign</groupId>
<artifactId>feign-reactor-cloud</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>com.playtika.reactivefeign</groupId>
<artifactId>feign-reactor-spring-configuration</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>com.playtika.reactivefeign</groupId>
<artifactId>feign-reactor-webclient</artifactId>
<version>4.0.3</version>
</dependency>
2、Feign接口类实现(使用用方式和OpenFeign一样,只是注解不一样,注解参数和使用一样)
/**
* @author Lucas
* date 2024/3/7 12:40
* description Feign类
*/
@ReactiveFeignClient(name = "test-service")
public interface TestFeign {
/**
* 测试新增
* @param test
* @return
*/
@PostMapping(value = "/test/save")
Mono<Test> save(@RequestBody Test test);
}
3、YAML配置
reactive:
feign:
#超时配置
client:
config:
demoReactorFeign:
options:
connectTimeoutMillis: 2000
readTimeoutMillis: 2000
#负载均衡配置
loadbalancer:
enabled: true
#断路器配置
circuit:
breaker:
enabled: true