spring - 真的有必要将 Hystrix 与反应式 Spring Boot 2 应用程序一起使用吗?
问题描述
我在一个项目中工作,我们正在将我们的一些微服务从 Spring-MVC 转移到 Spring-Webflux 以测试反应范式。在 hystrix 的 github 存储库中寻求帮助,我们注意到该项目自一年前以来没有提交,并且它基于 RxJava,因此与 project-reactor 存在一些不兼容。
我们在使用 Hystrix 时遇到了一些问题,特别是“Javanica”中的注释不起作用,我们的开发人员需要使用 Spring-Cloud 中的 HystrixCommands。事实上,Hystrix 显然创建了自己的线程池,而不是反应堆的线程池。
到了这一点,我的问题不是如何在 Spring Boot 2.0 中使用 Hystrix,而是如果必须将来自我们微服务的所有外部调用包装在 HystrixCommand 中,或者如果只是使用 Reactor 方法(超时、onError、重试等),我们可以避免这种包装。
解决方案
您可以用内置的 Reactor 方法(超时、重试、limitRate、onError ......)替换许多 hystrix 功能。
对于断路器,您可以使用Resilience4j。很容易将其嵌入到现有的 Reactor 代码中
Mono<MyClass> myMono = ...;
CircuitBreaker circuitBreaker = ...;
myMono.transform(CircuitBreakerOperator.of(circuitBreaker)).subscribe(...)
推荐阅读
- asp.net-core - 如何将 AuthenticateResult.Fail(失败原因)、失败原因发送到响应正文
- active-directory - 如何搜索用户所属但使用特定用户属性的所有组?
- php - Vue js & Axios:渲染错误/无法读取属性
- unity3d - 如何将 Google Classroom API 与 Unity 集成,以便学生可以通过我的游戏提交测验答案?
- c# - 如何将隐式运算符与预处理器指令一起使用?
- sql - 将一行中的值除以第二行中的值 - 基于相同的分组
- python-3.x - 在 numpy.loadtxt() 中指定不加载或加载一系列列的列
- javascript - 如果需要在圆括号中的速记?
- marklogic - 像marklogic中的语句
- sql - 如何使用 SQL 为不同的列分配权重?