我花了一整天的时间试图找出为什么这不起作用,所以我认为如果我分享这个问题和答案可能会很有用
Resilience4j库提供了一个来自SpringBoot2的优雅的基于注释的解决方案。您所需要做的只是用提供的注释之一(如@CircuitBreaker
、@Retry
、@RateLimiter
、@Bulkhead
、@Thread
(对方法(或类(进行注释,然后自动添加适当的弹性模式。
我向Maven pom.xml添加了预期的依赖项:
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>${resilience4j.version}</version>
</dependency>
现在编译器很高兴,所以我可以添加注释:
...
import org.springframework.stereotype.Service;
import io.github.resilience4j.retry.annotation.Retry;
...
@Service
public class MyService {
...
@Retry(name = "get-response")
public MyResponse getResponse(MyRequest request) {
...
}
}
程序编译、运行,但注释被完全忽略。
根据弹性4j-spring-bot2文档:
模块期望在运行时已经提供
spring-boot-starter-actuator
和spring-boot-starter-aop
。
因此,整个技巧是将以及缺失的依赖项添加到Mavenpom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>