文章插图
2、服务端使用resilience4j实现限流使用一个服务端的接口简单模拟一下限流的方式,如设定5秒内最多10个请求,观察异常情况;
【spring-cloud使用resilience4j实现熔断、限流】同样是使用spring-boot的版本2.7.3,spring-cloud版本2021.0.4进行模拟
- 2.1、引入关键依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>
- 2.2、application.yaml配置文件增加ratelimiter配置
resilience4j:ratelimiter:instances:ApiService:limitForPeriod: 10limitRefreshPeriod: 5stimeoutDuration: 0
limitRefreshPeriod表示刷新周期,limitForPeriod表示一个时间周期内请求的总数,配置表示5秒内允许10个请求 。
- 2.3、写一个controller接收请求,service处理请求并增加限流控制,同时增加一个限流后异常处理
//ApiController.java@Slf4j@RequestMapping("/api")@RestControllerpublic class ApiController {@Autowiredprivate ApiService apiService;@GetMapping("/limit")public String limit() {return apiService.limit();}}//ApiService.java@Slf4j@Servicepublic class ApiService {@RateLimiter(name = "ApiService", fallbackMethod = "testFallback")public String limit() {return "success";}@SneakyThrowspublic String testFallback(java.lang.Throwable exception) {throw exception;}}//Advice.java@Slf4j@ControllerAdvicepublic class Advice {@ExceptionHandler(RequestNotPermitted.class)@ResponseStatus(HttpStatus.TOO_MANY_REQUESTS)public void error(){log.error("Too Many Requests");}}
编写一个ControllerAdvice通过处理RequestNotPermitted异常,返回客户端响应码429 。
- 2.3、编写一个测试类模拟限流情况
@Slf4j@SpringBootTestclass ResilienceTest {private RestTemplate restTemplate = new RestTemplate();@Testvoid limit() throws Exception {for (int i = 1; i <= 99; i++) {try {ResponseEntity<String> response = restTemplate.getForEntity("http://localhost:9999/api/limit", String.class);log.info("status code {} {}", String.format("%02d", i), response.getStatusCode());} catch (HttpClientErrorException e) {log.error("status code {}", e.getStatusCode());}Thread.sleep(400);}}}
可以适当减少单元测试的休眠时间,观察发生限流的情况 。推荐阅读
- 在国外如何使用支付宝?
- 打印机不能脱机打印怎么回事 打印机不能打印,显示脱机使用打印机
- 美的热水器的使用方法详解
- 洗面奶,洁面乳的正确使用方法
- 84消毒片的使用方法是什么?
- ESP的正确使用方法是什么? esp是什么意思
- 智能温控器怎样使用
- kgm格式怎么转换为mp3?
- 使用减肥药物的注意事项 吃减肥药要注意什么?
- 如何正确使用筷子、使用筷子有哪些礼仪