关于Spring Cloud Gateway 网关限流

2023-10-29

本文将使用以下两种方式实现网关的限流:

  • 使用 Spring Cloud Gateway 的 RequestRateLimiter 过滤器工厂基于 Redis 的限流,
  • 使用 Sentinel 结合 Spring Cloud Gateway 来实现网关限流。

使用 RequestRateLimiter 过滤器工厂结合 Redis 实现网关限流

RequestRateLimiter GatewayFilter 工厂使用实现 RateLimiter 的限流器来确定当前请求是否被限流。如果被限流了,则默认返回 HTTP 429 - Too Many Requests 状态。

RequestRateLimiter 网关过滤器工厂采用可选的 keyResolver 参数和特定于速率限制器的参数。

KeyResolver在源码中的定义:

public interface KeyResolver {
	Mono<String> resolve(ServerWebExchange exchange);
}
复制代码

我们可以通过 KeyResolver 来指定限流的 key ,比如可以根据用户做限流,也可以根据 IP 来做限流,或者根据接口进行限流。

基于 Redis 的限流器

目前限流器的实现提供了基于 Redis 的实现,其使用的算法是 令牌桶算法 。

基于 Redis 的限流,需要引入 spring-boot-starter-data-redis-reactive 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
复制代码

要实现限流,需要配置 Redis 连接以及在配置网关路由的时候添加 RequestRateLimiter 过滤器:

spring:
  redis:
    host: 192.168.242.112
    port: 16397
    password: s1lcA6;.7Lx9,x
  cloud:
    gateway:
      routes:
      - id: order-service
        uri: lb://order-service
        filters:
        - name: RequestRateLimiter
          args:
            redis-rate-limiter.replenishRate: 10
            redis-rate-limiter.burstCapacity: 20
            key-resolver: "#{@userKeyResolver}"
复制代码

这里配置的是按照用户限流,其中参数 key-resolver: "#{@userKeyResolver}" 是一个 KeyResolver Bean:

@Configuration
public class RateLimiterConfig {
    @Bean
    public KeyResolver userKeyResolver() {
        return exchange -> Mono.just(Objects.requireNonNull(exchange.getRequest().getQueryParams().getFirst("userId")));
    }
}
复制代码

#{@userKeyResolve

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于Spring Cloud Gateway 网关限流 的相关文章

随机推荐

  • 全网最全的微服务+Outh2套餐,Gateway整合Oauth2!(入门到精通,附源码)满足你的味蕾需要(三)

    上篇文章主要讲解Oauth2模块 user service模块 feign模块 那么作为重中之重的gateway 我们将其做成资源服务器来进行开发 一 资源服务器的实现方式 资源服务器在实际开发有两种实现方式 1 gateway做网关转发
  • LaTex学习笔记(书籍的基本实现)

    1 书籍的首页 书籍首页应该是标题与作者 生成代码如下 在正文区输入 title 书籍名称 书籍名 author 作者名称 作者名 date 指令用于删除日期 maketitle 标题结束 eg 若想删除日期 需在标题结束指令 maketi
  • 简述泵站计算机监控主要功,泵站设备安全运行监视有哪些?

    强化中控室监控系统对泵站设备的安全运行监视 是发挥其监视作用的重要内容 安全运行监视主要包括 1 设备状态监视 泵站工彻勺运行需要设备的安全工作 因此作为泵站监视系统的核心 要准确对设备白训犬态进行监视二首先要月豺目关的设备固矛清况与中控室
  • Failed to restart network.service: Unit network.service not found

    在配置完网络设置时重启时会出现这个问题 原因是和NetworkManager 服务有冲突 解决办法就是关闭NetworkManager然后重启一下Network服务 service NetworkManager stop 关闭Network
  • 创新奇智上市:是李开复心血之作 揭秘背后的塔尖孵化模式

    雷递网 雷建平 1月27日报道 青岛创新奇智科技集团股份有限公司 股份代号 2121 简称 创新奇智 今日在港交所上市 发行价为26 30港元 募资净额10 7亿港元 创新奇智开盘价与发行价持平 以开盘价计算 创新奇智市值超140亿港元 创
  • 用免费的谷歌GPU训练神经网络

    前提是先得注册一个google邮箱 再用该邮箱注册一个谷歌云盘 或者直接用这个谷歌邮箱就可以登陆云盘 1 云盘 网址应该是这个 https drive google com drive 不行就试一下这个 https drive google
  • 透视Matplotlib核心功能和工具包 - 不同图形格式

    Matplotlib创建的报告和仪表板可以以不同的方式使用 它们可以在上游Web应用程序中使用 也可以以PDF文件的形式分发 还可以嵌入到GUI工具箱中或在线交互式地使用 在此 我们将学习如何以各种格式保存报告 以便可以将它们分发给使用者以
  • 从零开始学WEB前端——HTML实战练习

    项目介绍 先做个自我介绍 本人是一个没人写前端所以就自学前端的后端程序员 在此项目中我会和大家一起从零基础开始学习前端 从后端程序员的视角来看前端 受限于作者的水平本项目暂时只会更新到前端框架VUE 不会涉及node js 该项目适合零基础
  • element dialog 垂直水平居中显示

    如何让组件中的dialog在可视区域垂直水平居中 先将dialog放到body的下层 保证自己写的样式相对于视口区域生效 element dialog文档中有个append to body属性 将其设置为true 会将dialog扔到bod
  • OpenWrt之kmod内核不兼容分析

    文章目录 OpenWrt之kmod内核不兼容分析 Kmod内核模块MD5校验 Kmod内核信息 强制安装kmod 解决kmod内核不兼容 查看CPU架构 feeds源参考 OpenWrt之kmod内核不兼容分析 Kmod内核模块MD5校验
  • GPAC MP4文件写入(支持H264、H265)

    1 GPAC模块下载链接https github com gpac gpac或https gpac wp imt fr downloads 2 编译指导https github com gpac gpac wiki Build Introd
  • 华为机试C语言-字符串处理

    题目描述 https pycoder blog csdn net article details 124656685 include
  • 【网络安全】Spring框架漏洞总结(一)

    Spring简介 Spring是Java EE编程领域的一个轻量级开源框架 该框架由一个叫Rod Johnson的程序员在2002年最早提出并随后创建 是为了解决企业级编程开发中的复杂性 业务逻辑层和其他各层的松耦合问题 因此它将面向接口的
  • rxjava 流式开发

    RxJava 是一种支持响应式编程的库 它允许您以流式方式处理异步事件序列 使用 RxJava 您可以将事件序列视为一个流 并使用丰富的操作符对这个流进行转换 过滤 组合等操作 以生成您所需的结果 在 RxJava 中 数据源可以是任何可观
  • MySQL 上机操作--数据库及数据表操作

    前言 如有不当之处 还望指正 一 上机目的 熟练掌握基本表的定义 删除与修改 为后继学习作准备 二 上机设备 1台计算机 数据库系统安装MySql 三 相关准备知识 3 1 掌握数据库的定义 删除与修改 3 2 掌握基本表的定义 删除与修改
  • 程序控制流图

    基本符号 ps 请将线看成弧线 doge 顺序结构 if选择结构 while循环结构 case多分支结构 控制流图由节点和控制流线 弧 两种符号组成 结点以标有编号的圆圈表示 用于表示程序流程图中矩形框 菱形框的功能 是一个或多个分支的语句
  • 10分钟上手Azure Blob Storage

    文章目录 Azure Blob Storage快速上手 背景 什么是Azure Blob Storage Blob Storage的应用场景 环境搭建 安装 运行 修改Blob Storage中的数据 基本操作 使用C 修改文件属性 遇到问
  • 平摊分析典型例题及解答

    Exercise 1 5 对某个数据结构执行大小为 n 的一个操作序列 若 i 为 2 的整数幂 则第 i 个操作的代价 为 i 否则为 1 请利用会计方法分析每次操作的平摊代价 Exercise 2 15 Bill 提出了一种叫做翻转堆栈
  • SpringClud Sleuth + Zipkin + Kafka实现分布式链路追踪

    SpringClud Sleuth Zipkin Kafka实现分布式链路追踪 使用步骤 使用步骤 1 导入 pom 依赖
  • 关于Spring Cloud Gateway 网关限流

    本文将使用以下两种方式实现网关的限流 使用 Spring Cloud Gateway 的 RequestRateLimiter 过滤器工厂基于 Redis 的限流 使用 Sentinel 结合 Spring Cloud Gateway 来实