欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 高并发之熔断器,springboot整合Resilience4j实现熔断器

高并发之熔断器,springboot整合Resilience4j实现熔断器

2025/3/10 15:56:10 来源:https://blog.csdn.net/weixin_42485982/article/details/146076249  浏览:    关键词:高并发之熔断器,springboot整合Resilience4j实现熔断器

添加依赖

<dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-spring-boot2</artifactId><version>1.7.0</version>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

这里有个坑,AOP依赖是必须的,因为Resilience4j 是依赖于 AOP 来拦截方法调用的。

application.properties

resilience4j.circuitbreaker.instances.myCircuitBreaker.register-health-indicator=true
# 失败率阈值(50%)
resilience4j.circuitbreaker.instances.myCircuitBreaker.failure-rate-threshold=50
# 最小调用次数
resilience4j.circuitbreaker.instances.myCircuitBreaker.minimum-number-of-calls=5
# 滑动窗口大小
resilience4j.circuitbreaker.instances.myCircuitBreaker.sliding-window-size=10
# 熔断后等待时间
resilience4j.circuitbreaker.instances.myCircuitBreaker.wait-duration-in-open-state=10s
#滑动窗口类型(基于次数)
resilience4j.circuitbreaker.instances.myCircuitBreaker.sliding-window-type=COUNT_BASED

Controller

import com.example.testdemo.service.MyService;
import io.github.resilience4j.ratelimiter.annotation.RateLimiter;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequiredArgsConstructor
public class MyController {private final MyService myService;@GetMapping("/testCircuitBreaker")public String testCircuitBreaker() {// 模拟业务逻辑return myService.testCircuitBreaker();}}

Service

import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;/*** @author user*/
@Service
public class MyService {@Autowiredprivate CircuitBreakerRegistry circuitBreakerRegistry;private int counter = 0;@CircuitBreaker(name = "myCircuitBreaker", fallbackMethod = "fallback") // 熔断public String testCircuitBreaker() {io.github.resilience4j.circuitbreaker.CircuitBreaker circuitBreaker = circuitBreakerRegistry.circuitBreaker("myCircuitBreaker");System.out.println("Circuit Breaker State: " + circuitBreaker.getState()); // 打印熔断器状态counter++;System.out.println(counter);if (counter % 2 == 0) {  // 模拟50%的失败率throw new RuntimeException("Service call failed!");}if (counter > 3 && counter < 10) {throw new RuntimeException("Service call failed!");}return "Service call succeeded!";}// 熔断降级方法public String fallback(Exception ex) {return "Service is unavailable, please try again later.";}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词