OpenFeign是Spring Cloud的一部分,它基于Feign实现了声明式服务调用和负载均衡。以下是OpenFeign的一些主要特性:
总的来说,OpenFeign是一个功能强大的声明式服务调用和负载均衡工具,它可以提高服务调用的效率和灵活性,并可以帮助用户更好地管理他们的分布式系统。
但是OpenFeign并不支持反应式客户端,如Spring WebClient,Spring Cloud OpenFeign也不支持。
feign-reactor是Spring Cloud的feign的扩展,它提供了对Reactor Netty的支持,可以更好地处理HTTP请求。具体来说,feign-reactor基于Reactor Netty实现,它支持Reactive编程模型,可以更好地处理异步请求,并且可以更好地利用网络资源。此外,feign-reactor还提供了一些其他的特性,例如:支持负载均衡、支持熔断器、支持自定义请求和响应等。
总的来说,feign-reactor可以提升feign在处理HTTP请求时的效率和灵活性。
使用上基本与openfeign一致,就是将相应的注解换了相应的名称。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId></dependency><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>
feign-reactor-cloud依赖提供了CircuitBreaker + LoadBalancer的支持。
feign-reactor-webclient依赖提供了有关WebClient客户端相关的实现及配置。
feign-reactor-spring-configuration依赖提供了Spring自动配置。
@SpringBootApplication// 这里与openfeign就是名称不一样@EnableReactiveFeignClientspublic class SpringcloudFeignReactorApplication {}
@ReactiveFeignClient( // 目标地址 url = "http://localhost:8088/demos", // 这里没有走服务发现机制,随意 name = "demoReactorFeign", // 回退;当发生异常或超时调用,这里与openfeign一样都需要实现当前feign接口 fallback = DemoReactorFeignFallback.class, // 配置 configuration = {DemoReactorFeignConfig.class})public interface DemoReactorFeign { // 下面这个注解是feign的注解 // @RequestLine("GET /info/{id}") // feign中@PathVariable => @Param // 基于SpringMVC的注解 @GetMapping("/info/{id}") public Mono<Object> info(@PathVariable("id") Integer id) ; }
public class DemoReactorFeignFallback implements DemoReactorFeign { @Override public Mono<Object> info(Integer id) { return Mono.just("请求失败") ; }}
// 这里没有添加@Configuration注解,不需要,不过添加了也可以,只是可能会出现问题public class DemoReactorFeignConfig { // 配置上面的回退类 @Bean public DemoReactorFeignFallback demoReactorFeignFallback() { return new DemoReactorFeignFallback() ; } }
以上对feign reactor的使用除了类不一样外,其它都与openfeign是保持一致的。
@RestController@RequestMapping("/reactor")public class DemoController { @Resource private DemoReactorFeign demoReactorFeign ; @GetMapping("/{id}") public Object info(@PathVariable("id") Integer id) { return this.demoReactorFeign.info(id) ; } }
图片
成功调用目标接口
超时配置,我们只需要提供配置即可
reactive: feign: client: config: default: options: connectTimeoutMillis: 1000 readTimeoutMillis: 1000
以上是默认配置,对所有的接口都是一样的超时时间。
由于目标接口模拟了耗时操作,所以调用了回退接口
reactive: feign: client: config: demoReactorFeign: options: connectTimeoutMillis: 2000 readTimeoutMillis: 2000
也可以直接通过编程的方式
public class ProgramReactorFeignMain { @Headers({ "Accept: application/json" }) static interface DemoReactorFeign { @RequestLine("GET /info/{id}") public Mono<Object> info(@Param("id") Integer id) ; } public static void main(String[] args) throws Exception { DemoReactorFeign target = WebReactiveFeign // WebClient based reactive feign //JettyReactiveFeign // Jetty http client based //Java11ReactiveFeign // Java 11 http client based .<DemoReactorFeign>builder() // 指定方法返回值参数化类型 .target(DemoReactorFeign.class, "http://localhost:8088/demos") ; target.info(6666).doOnNext(System.out::println).block() ; } }
完毕!!!
本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-11247-0.html高并发下就该使用非阻塞式方式接口调用提高系统整体性能
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: Go 语言史诗级更新-循环Bug修复
下一篇: 分布式微服务架构中的关键技术解析