限流器 github的ratelimiter

一、pom依赖

  <!--限流器-->
        <dependency>
            <groupId>io.github.resilience4j</groupId>
            <artifactId>resilience4j-ratelimiter</artifactId>
            <version>1.7.0</version>
        </dependency>

二、限流器配置

package com.test.config;

import io.github.resilience4j.ratelimiter.RateLimiter;
import io.github.resilience4j.ratelimiter.RateLimiterConfig;
import io.github.resilience4j.ratelimiter.RateLimiterRegistry;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.Duration;

@Configuration
public class RateConfig {
   
    @Value("${ratelimit.qps.handshake:100}")
    private int handshakeQps; // 默认QPS 100

    @Value("${ratelimit.qps.msg:5000}")
    private int msgQps;       // 默认QPS 5000


    //3s内只能发送一次请求
    @Bean(name = "test")
    public RateLimiter test() {
   
        RateLimiterConfig rateLimiterConfig = RateLimiterConfig.custom()
                .timeoutDuration(Duration.ofMillis(0))                   // 不等待 直接失败
                .limitRefreshPeriod(Duration.ofMillis(3000))             // 表示每隔多长时间刷新一次限流计数器   这里3s
                .limitForPeriod(1)                                      // 一个限流周期内允许的最大请求数       这里1次
                .build();
        return RateLimiterRegistry.of(rateLimiterConfig).rateLimiter("handshake");
    }


    //握手的限流策略(0.1s内允许10个握手连接)
    @Bean(name = "handshake")
    public RateLimiter handshakeRateLimiter() {
   
        int tenMillis = 10;  // 时间单位同时除 10
        RateLimiterConfig config = RateLimiterConfig.custom()
                .timeoutDuration(Duration.ofMillis(0))                   // 不等待 直接失败
                .limitRefreshPeriod(Duration.ofMillis(1000 / tenMillis)) // 按 100ms 刷新 更平滑
                .limitForPeriod(handshakeQps / tenMillis)                // 平均 QPS
                .build();
        return RateLimiterRegistry.of(config).rateLimiter("handshake");
    }

    //发送消息的限流策略(0.1s内允许发送500个消息)
    @Bean(name = "sendMsg")
    public RateLimiter sendMsgRateLimiter() {
   
        int tenMillis = 10;  // 时间单位同时除 10
        RateLimiterConfig config = RateLimiterConfig.custom()
                .timeoutDuration(Duration.ofMillis(0))                    // 不等待 直接失败
                .limitRefreshPeriod(Duration.ofMillis(1000 / tenMillis))  // 按 100ms 刷新 更平滑
                .limitForPeriod(msgQps / tenMillis)                       // 平均 QPS
                .build();
        return RateLimiterRegistry.of(config).rateLimiter("sendMsg");
    }


}

三、限流器使用

@RestController
public class TestController {
   


    @Resource(name = "test")
    RateLimiter test;
    @Resource(name = "handshake")
    RateLimiter handshake;
    @Resource(name = "sendMsg")
    RateLimiter sendMsg;

    @GetMapping("/test")
    public String test() {
   
        boolean b1 = test.acquirePermission();
        boolean b2 = handshake.acquirePermission();
        boolean b3 = sendMsg.acquirePermission();
        System.out.println("sendMsg: " + b1 + "   handshake: " + b2 + "   sendMsg: " + b3);

        return "test";
    }
}

相关推荐

  1. githubratelimiter

    2024-02-22 08:38:04       26 阅读
  2. Redisson 分布式 RRateLimiter 使用及原理

    2024-02-22 08:38:04       28 阅读
  3. RateLimiter 算法使用

    2024-02-22 08:38:04       7 阅读
  4. Spring Boot(七十一):整合RateLimiter实现接口

    2024-02-22 08:38:04       17 阅读
  5. go

    2024-02-22 08:38:04       16 阅读
  6. Springboot Redis Lua 分布式

    2024-02-22 08:38:04       47 阅读
  7. 【etcd】设计

    2024-02-22 08:38:04       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-22 08:38:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-22 08:38:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-22 08:38:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-22 08:38:04       18 阅读

热门阅读

  1. windows系统中jenkins构建报错提示“拒绝访问”

    2024-02-22 08:38:04       38 阅读
  2. Linux常用命令总结

    2024-02-22 08:38:04       21 阅读
  3. yarn常用命令小记

    2024-02-22 08:38:04       26 阅读
  4. 使用多线程常见的架构

    2024-02-22 08:38:04       25 阅读
  5. 深入解析Lambda架构与Kappa架构

    2024-02-22 08:38:04       22 阅读
  6. 蓝桥杯刷题--python-10(2023填空题3)

    2024-02-22 08:38:04       34 阅读
  7. docker搭建Postgresql主备集群

    2024-02-22 08:38:04       27 阅读