当前位置: 首页 > news >正文

关于springcloud Gateway中的限流

我们在开发系统的时候可能会对系统进行限流的需求, springcloudGateway有自带限流的方案,在此之前可以先去学习一下springcloud gateway中的filter。
springcloud Gateway中提供了一个RequestRateLimiterGatewayFilterFactory。
这种限流方式用到了redis, 先添加redis的依赖。

配置类如下:

public class RemoteAddrKeyResolver implements KeyResolver {

    public static final String BEAN_NAME = "remoteAddrKeyResolver";

    @Override
    public Mono<String> resolve(ServerWebExchange exchange) {
        System.out.println("hello");
        Mono<String> just = Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
        return just;
    }
}
@Configuration
public class RemoteKeyResolver {

    @Bean(name="remoteAddrKeyResolver")
    public RemoteAddrKeyResolver remoteAddrKeyResolver() {
        return new RemoteAddrKeyResolver();
    }
}

在此我们是根据ip地址限流的, Mono<String> just = Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress())

application.yml配置文件配置如下:

spring:
  application:
    name: gateway-service
#  redis:
#    database: 0
#    host: localhost
#    port: 6379
#    password:
#    timeout: 1000ms
#    lettuce:
#      pool:
#        max-active: 8
#        max-idle: 8
#        min-idle: 1
#        max-wait: 1000ms
#  cache:
#    type: REDIS
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: order
          uri: lb://order-service
          predicates:
          - Path=/api/order-service/**
          filters:
          - StripPrefix=1
          - name: RequestRateLimiter
            args:
              key-resolver: '#{@remoteAddrKeyResolver}'
              redis-rate-limiter.replenishRate: 1
              redis-rate-limiter.burstCapacity: 2

上面贴出的是完整的springcloud Gateway的配置, 主要配置为filters下的-RequestRateLimiter,
key-resolver表示使用名为remoteAddKeyResolver的限流配置配置类,此限流方式采用的是令牌桶算法的限流方式
redis-rate-limiter.repleushRate :令牌桶每秒填充平均速率。
redis-rate-limiter.burstCapacity: 令牌桶的总容量

相关文章:

  • 老婆!辛苦了
  • 精品思维导图,流程图模板分享
  • ubuntu制作本地源
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • Activiti数据库
  • pdf文件如何在线转换为jpg图片
  • ###STL(标准模板库)
  • mysql-5.6的GTID复制的实现
  • 整理一些计算机基础知识!
  • QMake study(part 3)
  • 制作公安系统产品思路
  • 对象
  • Install Erlang in Ubuntu
  • [日常] imap协议读取邮件
  • Java数据类型
  • [PHP内核探索]PHP中的哈希表
  • 77. Combinations
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • css属性的继承、初识值、计算值、当前值、应用值
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Java小白进阶笔记(3)-初级面向对象
  • mysql 5.6 原生Online DDL解析
  • node 版本过低
  • Python中eval与exec的使用及区别
  • socket.io+express实现聊天室的思考(三)
  • XML已死 ?
  • 给第三方使用接口的 URL 签名实现
  • 简单实现一个textarea自适应高度
  • 解析 Webpack中import、require、按需加载的执行过程
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 学习HTTP相关知识笔记
  • 在Docker Swarm上部署Apache Storm:第1部分
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • Java数据解析之JSON
  • Spring第一个helloWorld
  • 容器镜像
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (16)Reactor的测试——响应式Spring的道法术器
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2)nginx 安装、启停
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十三)Maven插件解析运行机制
  • (转) ns2/nam与nam实现相关的文件
  • (转)ABI是什么
  • (转)Linq学习笔记
  • (转)linux下的时间函数使用
  • (转)四层和七层负载均衡的区别
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .Net 访问电子邮箱-LumiSoft.Net,好用