用参数装饰 Resilience4j 断路器中的函数

Decorate function in Resilience4j circuit breaker with parameter

我想用最新的 resilience4j 断路器装饰我的服务调用,我当前的代码如下:

@Bean
public Function<MyObject1, MyObject2> decoratedFunction(MyService myService) {
    CircuitBreakerRegistry registry = CircuitBreakerRegistry.ofDefaults();
    CircuitBreaker circuitBreaker = registry.circuitBreaker("circuitBreaker");
//decorateFunction method no longer exists :/
    return circuitBreaker.decorateFunction((myObject1) -> myService.makeACall(myObject1))
}

曾经有一种方法叫做decorateFunction,我很想用它,但不知什么原因,它在最新版本的resilience4j中被删除了(我使用的是最新的1.4版本)

任何人都知道为什么这个功能被删除了,它的当前替代品是什么? 我看到有像 decorateSupplier 这样的方法,但我需要向我的服务传递一个参数(供应商不允许这样做)

看起来在最新版本的弹性中这个方法出于某种原因是静态的,所以简单地使用它:

@Bean
public Function<MyObject1, MyObject2> decoratedFunction(MyService myService) {
    CircuitBreakerRegistry registry = CircuitBreakerRegistry.ofDefaults();
    CircuitBreaker circuitBreaker = registry.circuitBreaker("circuitBreaker");
//decorateFunction method is static now
    return CircuitBreaker.decorateFunction(circuitBreaker, (myObject1) -> myService.makeACall(myObject1))
}

请使用我们的 Spring Boot Starter 而不是创建您自己的 CircuitBreakerRegistry。 然后将自动创建的 CircuitBreakerRegistry 注入您的代码并检索 CircuitBreaker 实例。

CircuitBreaker circuitBreaker = registry.circuitBreaker("circuitBreaker");

在您的服务代码中执行:

public MyObject2 makeACall(MyObject1 myObject1) {
    return circuitBreaker.executeSupplier(() -> myService.makeACall(myObject1))
}