gpt4 book ai didi

java - 将 HystrixCommands 迁移到 Resilience4j

转载 作者:行者123 更新时间:2023-12-04 15:49:57 28 4
gpt4 key购买 nike

鉴于 Hystrix 进入维护模式,我一直致力于将(相当大的)代码库迁移到 Resilience4j。

我在 Hystrix 中大量使用以下模式:

new HystrixCommand<SomeReturnValue>(DependencyKeys.DEPENDENCY) {
@Override
protected SomeReturnValue run() {
return someExpensiveCall();
}
}
.observe()

我想用 Resilience4j 复制一些 Hystrix 的功能。

到目前为止,我有以下语法来连接外部调用:

resilience.single(DependencyKeys.DEPENDENCY, this::someExpensiveCall);

Resilience类提供了 single方法:

public <T> Single<T> single(ResilienceKey key, Callable<T> callable) {
return Completable.complete()
.subscribeOn(Schedulers.computation())
.observeOn(configuration.scheduler(key))
.andThen(Single.defer(() -> Single.fromCallable(callable)
.lift(CircuitBreakerOperator.of(configuration.circuitBreaker(key)))
.lift(RateLimiterOperator.of(configuration.rateLimiter(key)))
.lift(BulkheadOperator.of(configuration.bulkhead(key)))
))
.observeOn(Schedulers.computation());
}

在断路和在不同线程池上运行代码方面,这看起来如何更好地类似于您使用 Hystrix 获得的效果,但以更合理的方式。我真的不喜欢用 Completable.complete() 启动链条只是为了我可以强制 observeOn在实际可调用文件被包装之前。

最佳答案

我认为没有直接替代HystrixCommandResilience4j .
最相似的是CircuitBreaker.decorateCompletionStageCircuitBreaker.executeCompletionStage .使用此方法您可以装饰 CompletableFuture 上的任何类型。供应商。
其他选择是依赖我们与不同异步模块的集成,例如 rxjava2reactor .
当然,如果这些选项都不适合您,请不要忘记 Resilience4j是一个非常无主见、模块化和可组合的库。通过使用我们的 3 个最低级别的方法,您可以将我们的断路器安装在任何类型的并发范例库中:

  • CircuitBreaker.isCallPermitted
  • CircuitBreaker.onError
  • CircuitBreaker.onSuccess

  • 我们的其他核心组件也是如此。
    我希望这个答案至少有一点帮助。如果您有任何其他问题,我将很乐意为您提供帮助。快乐黑客😉

    关于java - 将 HystrixCommands 迁移到 Resilience4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54238932/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com