3

我想用最新的 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,我很想使用,但由于未知原因,它在最新版本的弹性 4j 中被删除(我使用的是最新的 1.4 版本)

任何人都知道为什么这个功能被删除,目前的替代品是什么?我看到有类似的方法,decorateSupplier但我需要将参数传递给我的服务(在供应商的情况下不允许这样做)

4

2 回答 2

1

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

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

在您的服务代码中执行:

public MyObject2 makeACall(MyObject1 myObject1) {
    return circuitBreaker.executeSupplier(() -> myService.makeACall(myObject1))
}
于 2020-05-22T08:09:36.013 回答
0

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

@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))
}
于 2020-05-22T07:22:26.163 回答