两天学会微服务网关Gateway-Gateway网关限流

锋哥原创的微服务网关Gateway视频教程:

Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibiliGateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3_Gateway HelloWorld快速入门等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1oX4y1u7ZJ/gateway默认给我们提供了限流实现,也就是网关拦截器RequestRateLimiter。

6.1 令牌桶限流算法

RequestRateLimiter底层实现是令牌桶算法;

令牌桶内存储令牌,令牌桶需要设置令牌容量,也就是系统最大的并发大;

以一定的速率生成令牌(具体速率根据系统性能设置),放到令牌桶,如果桶慢了,则丢弃;

客户端来一个请求,则先去令牌桶获取令牌,拿到令牌,则处理请求,否则 丢弃或者返回失败;

令牌桶算法的优点:

通过恒定的速率生成令牌桶,能够让请求处理更均匀,不会出现短时间大量的请求处理;

比较友好的控制高并发;

6.2 Gateway网关限流实例

Spring Cloud Gateway官方提供了 RequestRateLimiterGatewayFilterFactory 过滤器工厂,使用 RedisLua 脚本实现了令牌桶,来实现网关限流;

添加下Redis依赖:

<!-- spring boot redis 缓存引入 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- lettuce pool 缓存连接池 -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>
URI限流

配置类:

package com.java1234.config;import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import reactor.core.publisher.Mono;/*** 限流规则配置类* @author java1234_小锋* @site www.java1234.com* @company Java知识分享网* @create 2021-01-23 11:16*/
@Configuration
public class keyResolverConfiguration {@Beanpublic KeyResolver pathKeyResolver(){/*return new KeyResolver() {@Overridepublic Mono<String> resolve(ServerWebExchange exchange) {return Mono.just(exchange.getRequest().getURI().getPath());}};*/return exchange -> Mono.just(exchange.getRequest().getURI().getPath());  // URI限流}
}

yml配置:

spring:application:name: gateway-servercloud:gateway:routes:- id: rateLimiteruri: http://localhost:8080/predicates:- Path=/product/**filters:- name: RequestRateLimiter  # 限流过滤器args:redis-rate-limiter.replenishRate: 1   # 令牌桶每秒填充速率redis-rate-limiter.burstCapacity: 2   # 令牌桶总容量redis-rate-limiter.requestedTokens: 1  # 一个请求需要消费的令牌数key-resolver: "#{@pathKeyResolver}"redis:  # redis配置host: 192.168.0.103 # IPport: 6379  # 端口password:  # 密码connect-timeout: 10s  # 连接超时时间lettuce: # lettuce redis客户端配置pool:  # 连接池配置max-active: 8  # 连接池最大连接数(使用负值表示没有限制) 默认 8max-wait: 200s  # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1max-idle: 8 # 连接池中的最大空闲连接 默认 8min-idle: 0 # 连接池中的最小空闲连接 默认 0

访问过多之后,报429错误;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sublime Text 格式化Json文件 之 Pretty Json

需要使用到 Pretty Json插件。 一、安装方法 sublime 下&#xff0c;按快捷键 Comand control p&#xff0c; 输入install Package,然后回车 等几秒钟&#xff0c;加载启动进程完毕后弹出的页面中输入pretty json, 然后回车 等待几秒钟&#xff0c;可以查看Sublime 最下面的…

HUAWEI 华为交换机 配置 MAC 防漂移 防MAC伪造示例

组网需求 某企业网络中&#xff0c;用户需要访问企业的服务器。如果某些非法用户从其他接口假冒服务器的MAC 地址发送报文&#xff0c;则服务器的 MAC 地址将在其他接口学习到。这样用户发往服务器的报文就会发往非法用户&#xff0c;不仅会导致用户与服务器不能正常通信&…

力扣:71. 简化路径

栈 1.思路&#xff1a;在栈中只要把 / 的下标进栈和出栈就可以计算字符串中的字母&#xff0c;获取字符串中的字母用substring&#xff08;&#xff09;函数根据 两个 / 的下标来确定区间。之后把符合的字母加入集合中。之后要判断值为“. ."时要删除集合中最后一个元素。…

【粉丝福利】一本书讲透ChatGPT,实现从理论到实践的跨越!大模型技术工程师必读

&#x1f33c;一、前言 OpenAI 在 2022 年 11 月推出了人工智能聊天应用—ChatGPT。它具有广泛的应用场景&#xff0c;在多项专业和学术基准测试中表现出的智力水平&#xff0c;不仅接近甚至有时超越了人类的平均水平。这使得 ChatGPT 在推出之初就受到广大用户的欢迎&#xf…

Oracle存储过程干货(一):存储过程基础

/ SQLplus中&#xff0c;设置 set serveroutput on 才能显示输出结果 / —匿名的PLSQL(存储过程)块&#xff0c;不存储在数据库中 beginnull; end; /begindbms_output.put(hi ); /*put是不换行的输出*/dbms_output.put_line(hello world); /*put_line是换行的输出*/ end…

phthon脚本练习案例

记录一下phthon脚本练习案例&#xff0c;方便学习phthon知识点 案例1 需求&#xff0c;统计当前根目录代码行数知识点&#xff0c;os time参考&#xff0c;Python 实用脚本 案例2 需求&#xff0c;扫描当前目录和所有子目录并显示大小知识点&#xff0c;os sys参考&#xff…

在Windows 10和11中打开事件查看器的11种方法,总有一种适合你

Windows事件查看器是一个功能强大的工具,可以记录电脑从启动到关机的所有过程。你可以使用它查看有关应用程序错误、不同系统服务生成的警告的详细信息,以及有关驱动程序和服务状态的信息。这就是为什么当你需要识别或解决计算机或设备上的问题时,Windows 11和Windows 10事件…

【金九银十】,架构师花费近一年时间整理出来的安卓核心知识

面试经历 主要是根据回忆总结的&#xff08;会有遗漏点&#xff09;。 1. 腾讯&#xff08;QQ音乐&#xff09; 腾讯面试涉及到的范围也很广&#xff0c;甚至问到了C、Kotlin Flutter &#xff0c;也具有一定挑战性的&#xff0c;以下包括腾讯腾讯安卓客户端三面&#xff0c…

国创证券|降准对股市的影响,利好哪些板块?

降准是指央行下调金融机构存款准备金率&#xff0c;是一种宽松的钱银政策&#xff0c;会添加社会上的流动资金&#xff0c;然后推动股市上涨&#xff0c;对股市来说是一种利好&#xff0c;其间利好以下板块&#xff1a; 1、利好房地产板块 央行降准会进步银行可贷资金&#x…

每日一题-链表的中间结点

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 上面是解题题目&#xff1a; 解题思路&#xff1a;快慢指针法--慢指针一次指向下一个&#xff0c;快指针一次指向下两个 解答过程&#xff1a; /*** Definition for singly-linked…

Linux学习-指针与数组

目录 数组和指针的关系 数组指针&#xff1a; 数组和指针的关系代码 指针数组 指针和二维数组的关系 数组传参 数组和指针的关系 一维数组和指针的关系&#xff1a; int a[5] {1,43,5,3,2,}; 数组的数组名a是指向数组第一个元素a[0]的指针常量&#xff1b; a &a…

使用java构建一个哈夫曼树

使用java构建一个哈夫曼树 1. 定义节点类&#xff0c;表示哈夫曼树中的一个节点 代码&#xff1a; class Node implements Comparable<Node> {char ch; // 字符int freq; // 频率Node left, right; // 左右子节点// 节点构造函数public Node(char ch, int freq, Node …

JRebel and XRebel 插件在IDEA中的安装、激活和使用

1、JRebel安装 1、打开idea->setting->plugins->Marketplace 2、搜索插件JRebel and XRebel&#xff0c;点击安装&#xff0c;然后重启idea 如果左侧出现JRebel & XRebel代表已安装 3.离线安装JRebel 根据自己安装的idea版本进行下载电影的jrebel https://plugi…

如何检测ssh暴力破解

Shell Shell是一种用来与操作系统交互的命令行界面(CLI)。它允许用户通过输入命令来控制计算机并执行各种操作。 在Linux和Unix系统中,常用的Shell有bash、csh、ksh等。在Windows系统中,常用的Shell有cmd和PowerShell。 早期的互联网,直接通过Shell通信都是明文通信,一旦…

Flutter 设置每帧绘制结束调用的回调函数

前言 Flutter是一个开源的UI软件开发工具包&#xff0c;由Google开发&#xff0c;用于创建跨平台的移动应用程序。Flutter框架通过每帧渲染画面的方式&#xff0c;提供了流畅的用户体验和高性能的应用。在开发过程中&#xff0c;我们经常遇到需要在渲染完成一帧后执行某些特定…

1.Zookeeper理论基础

1.Zookeeper的基本概念 是一个分布式应用协调框架 &#xff0c;java编写的。客户端 /服务端 的架构模式。CP设计(一致性&#xff0c;分区容错) 它主要是用来解决分布式应用中经常遇到的一些数据管理问题&#xff0c;如&#xff1a;服务注册服务、状态同步服务、集群管理、分布…

ALV Grid 函数

ALV Grid 函数的输出有两个&#xff1a;REUSE_ALV_GRID_DISPLAY 和 REUSE_ALV_GRID_DISPLAY_LVC 两者的操作大同小异&#xff0c;只是后者能更好的和ALV容器结合使用&#xff0c;前后则不能&#xff1b;而在输入参数属性的结构上也有些差异。 本篇文章主要讲解下ALV函数中输入…

WordPress建站入门教程:忘记数据库名称、用户名和密码了怎么办?

有时候我们需要进入phpMyAdmin管理一些数据库&#xff0c;但是登录phpMyAdmin时却需要我们输入数据库的用户名和密码&#xff0c;但是我们不记得了应该怎么办呢&#xff1f; 其实&#xff0c;我们只需要进入WordPress网站根目录找到并打开wp-config.php文件&#xff0c;就可以…

vue2数据响应式原理解析

vue2与vue3区别浅析&#xff1a;vue2和vue3区别 浅析-CSDN博客 vue是mvvm框架&#xff0c;即“模型—视图—视图模型”&#xff0c;数据模式还是javascript对象&#xff0c;通过模型中应用程序数据和业务逻辑影响到视图的改变&#xff0c;视图(用户的操作)的改变会影响到底层数…

Git 进阶 高级用法,重要命令记录

本篇文章用于记录Git高级用法&#xff0c;新手可以看我的另一篇文章&#xff1a;Git基础教学。 Git git fetch 是git pull 的细分步骤&#xff0c;git pull 包含了git fetch git pull origin master 上述命令其实相当于git fetch git merge 在实际使用中&#xff0c;git fetc…