环境:SpringBoot2.7.15
1. 简介
Feign-reactive是一个用于在Spring Cloud应用程序中实现响应式微服务的框架。它支持在Spring Cloud应用程序中实现异步和非阻塞的远程调用。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