面试题答案
一键面试- 引入依赖: 确保项目中已引入Resilience4J相关依赖,例如在Maven项目中:
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-circuitbreaker</artifactId>
<version>1.7.1</version>
</dependency>
- 配置不同的熔断策略:
在Spring Boot项目中,可以通过
application.yml
文件配置不同的熔断策略。
resilience4j.circuitbreaker:
instances:
interface1:
registerHealthIndicator: true
failureRateThreshold: 100 # 连续5次失败,这里通过连续失败次数计算失败率为100%
minimumNumberOfCalls: 5
slidingWindowSize: 5
waitDurationInOpenState: 10s
interface2:
registerHealthIndicator: true
failureRateThreshold: 60
minimumNumberOfCalls: 10 # 这里设置10次调用统计失败率,可根据实际调整
slidingWindowSize: 10
waitDurationInOpenState: 20s
- 在代码中使用不同的熔断策略:
通过
CircuitBreakerRegistry
获取不同配置的断路器。
import io.github.resilience4j.circuitbreaker.CircuitBreaker;
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MyService {
private final CircuitBreaker circuitBreaker1;
private final CircuitBreaker circuitBreaker2;
@Autowired
public MyService(CircuitBreakerRegistry circuitBreakerRegistry) {
this.circuitBreaker1 = circuitBreakerRegistry.circuitBreaker("interface1");
this.circuitBreaker2 = circuitBreakerRegistry.circuitBreaker("interface2");
}
public void callInterface1() {
CircuitBreaker.decorateSupplier(circuitBreaker1, () -> {
// 调用接口1的业务逻辑
return null;
}).get();
}
public void callInterface2() {
CircuitBreaker.decorateSupplier(circuitBreaker2, () -> {
// 调用接口2的业务逻辑
return null;
}).get();
}
}
以上代码实现了针对不同业务接口设置不同熔断策略。通过配置文件定义不同的熔断规则,在代码中根据名称获取对应的断路器并应用到具体的业务接口调用上。