" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud Gateway實(shí)現(xiàn)限流功能詳解

 更新時(shí)間:2022年11月17日 14:38:15   作者:做一道光  
SpringCloud Gateway 是 Spring Cloud 的一個(gè)全新項(xiàng)目,它旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單有效的統(tǒng)一的 API 路由管理方式。這篇文章主要介紹了SpringCloud Gateway實(shí)現(xiàn)限流,需要的朋友可以參考下

1 什么是限流

通俗的說(shuō),限流就是 限制一段時(shí)間內(nèi),用戶訪問(wèn)資源的次數(shù) ,減輕服務(wù)器壓力,限流大致分為兩種:

1. IP 限流(5s 內(nèi)同一個(gè) ip 訪問(wèn)超過(guò) 3 次,則限制不讓訪問(wèn),過(guò)一段時(shí)間才可繼續(xù)訪問(wèn))

2. 請(qǐng)求量限流(只要在一段時(shí)間內(nèi)(窗口期),請(qǐng)求次數(shù)達(dá)到閥值,就直接拒絕后面來(lái)的訪問(wèn)了,過(guò)一段時(shí)間才可以繼續(xù)訪問(wèn))(粒度可以細(xì)化到一個(gè) api(url),一個(gè)服務(wù))

2 本次限流模型

限流模型 : 漏斗算法 ,令牌桶算法,窗口滑動(dòng)算法 計(jì)數(shù)器算法

入不敷出

1)、所有的請(qǐng)求在處理之前都需要拿到一個(gè)可用的令牌才會(huì)被處理;

2)、根據(jù)限流大小,設(shè)置按照一定的 速率 往桶里添加令牌;

3)、 桶設(shè)置最大的放置令牌限制 ,當(dāng)桶滿時(shí)、新添加的令牌就被丟棄或者拒絕;

4)、請(qǐng)求達(dá)到后首先要獲取令牌桶中的令牌,拿著令牌才可以進(jìn)行其他的業(yè)務(wù)邏輯,處理完業(yè)務(wù)邏輯之后,將令牌直接刪除;

5)、令牌桶有最低限額,當(dāng)桶中的令牌達(dá)到最低限額的時(shí)候,請(qǐng)求處理完之后將不會(huì)刪除令牌,以此保證足夠的限流;

3 Gateway結(jié)合redis實(shí)現(xiàn)請(qǐng)求量限流

Spring Cloud Gateway 已經(jīng)內(nèi)置了一個(gè) RequestRateLimiterGatewayFilterFactory,我們可以直接使用。

目前 RequestRateLimiterGatewayFilterFactory 的實(shí)現(xiàn)依賴于 Redis,所以我們還要引入spring-boot-starter-data-redis-reactive。

3.1 添加依賴

<!--限流要引入 Redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>

3.2 修改配置文件

server :

     port: 80

spring:

     application:

            name: gateway-80

      cloud:

            gateway :

enabled: true

routes:

id: user-service

uri: lb: //consumer-user-service

predicates:

- Path=/info/**

filters:

- name : RequestRateLimiter

args:

key-resolver:'#{@hostAddrKeyResolver} '

redis-rate-limiter.replenishRate: 1

redis-rate-limiter . burstCapacity: 3

redis:#redis的配置

host: 192.168.226.128

port: 6379

database: 6

eureka :

instance:

instance-id: ${spring.application.name}:${server.port}

prefer-ip-address: true

client:

service-url:

defaultzone: http:/ / localhost:8761/eureka/

3.3 配置文件說(shuō)明

在上面的配置文件,配置了 redis 的信息,并配置了 RequestRateLimiter 的限流過(guò)濾器,該過(guò)濾器需要配置三個(gè)參數(shù):

burstCapacity:令牌桶總?cè)萘俊?/p>

replenishRate:令牌桶每秒填充平均速率。

key-resolver:用于限流的鍵的解析器的 Bean 對(duì)象的名字。它使用 SpEL 表達(dá)式根據(jù)

3.4 創(chuàng)建配置類RequestRateLimiterConfig

@Configuration
public class RequestRateLimiterConfig {
/**
* IP 限流
* 把用戶的 IP 作為限流的 Key
*
* @return
*/
@Bean
@Primary
public KeyResolver hostAddrKeyResolver() {
return (exchange) -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
}
/**
* 用戶 id 限流
* 把用戶 ID 作為限流的 key
*
* @return
*/
@Bean
public KeyResolver userKeyResolver() {
return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("userId"));
}
/**
* 請(qǐng)求接口限流
* 把請(qǐng)求的路徑作為限流 key
*
* @return
*/
@Bean
public KeyResolver apiKeyResolver() {
return exchange -> Mono.just(exchange.getRequest().getPath().value());
}
}

3.5 啟動(dòng)快速訪問(wèn)測(cè)試

http://localhost/info?token=asdad 快速訪問(wèn)后報(bào) 429

查看 redis

到此這篇關(guān)于springcloud gateway實(shí)現(xiàn)限流功能詳解的文章就介紹到這了,更多相關(guān)springcloud限流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java開發(fā)學(xué)習(xí)之Bean的生命周期詳解

    Java開發(fā)學(xué)習(xí)之Bean的生命周期詳解

    從創(chuàng)建到消亡的完整過(guò)程,例如人從出生到死亡的整個(gè)過(guò)程就是一個(gè)生命周期。本文將通過(guò)示例為大家詳細(xì)講講Bean的生命周期,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(17)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(17)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • Java編程實(shí)現(xiàn)判斷網(wǎng)上鄰居文件是否存在的方法

    Java編程實(shí)現(xiàn)判斷網(wǎng)上鄰居文件是否存在的方法

    這篇文章主要介紹了Java編程實(shí)現(xiàn)判斷網(wǎng)上鄰居文件是否存在的方法,涉及Java針對(duì)路徑轉(zhuǎn)換及字符串操作的相關(guān)技巧,需要的朋友可以參考下
    2015-10-10
  • Java中多線程的ABA場(chǎng)景問(wèn)題分析

    Java中多線程的ABA場(chǎng)景問(wèn)題分析

    這篇文章主要為大家介紹了Java中多線程的ABA場(chǎng)景問(wèn)題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 如何修改HttpServletRequest中header中的信息

    如何修改HttpServletRequest中header中的信息

    這篇文章主要介紹了如何修改HttpServletRequest中header中的信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流

    spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流

    這篇文章主要介紹了spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 深入解析面向?qū)ο缶幊淘贘ava中的應(yīng)用小結(jié)

    深入解析面向?qū)ο缶幊淘贘ava中的應(yīng)用小結(jié)

    本文詳細(xì)介紹了面向?qū)ο缶幊痰幕靖拍?包括類和對(duì)象、封裝、繼承和多態(tài),通過(guò)具體的Java代碼示例,展示了如何在Java中應(yīng)用這些面向?qū)ο缶幊痰暮诵乃枷?感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • sqlserver和java將resultSet中的記錄轉(zhuǎn)換為學(xué)生對(duì)象

    sqlserver和java將resultSet中的記錄轉(zhuǎn)換為學(xué)生對(duì)象

    這篇文章主要介紹了如何利用sqlserver和java將resultSet中的記錄轉(zhuǎn)換為學(xué)生對(duì)象,附有超詳細(xì)的代碼,需要的朋友可以參考一下,希望對(duì)你有所幫助
    2021-12-12
  • Spring AOP 對(duì)象內(nèi)部方法間的嵌套調(diào)用方式

    Spring AOP 對(duì)象內(nèi)部方法間的嵌套調(diào)用方式

    這篇文章主要介紹了Spring AOP 對(duì)象內(nèi)部方法間的嵌套調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 學(xué)生視角帶你了解Java內(nèi)部類

    學(xué)生視角帶你了解Java內(nèi)部類

    說(shuō)起內(nèi)部類這個(gè)詞,想必很多人都不陌生,但是又會(huì)覺得不熟悉。原因是平時(shí)編寫代碼時(shí)可能用到的場(chǎng)景不多,用得最多的是在有事件監(jiān)聽的情況下,并且即使用到也很少去總結(jié)內(nèi)部類的用法。今天我們就來(lái)一探究竟
    2022-03-03

最新評(píng)論

化德县| 彩票| 将乐县| 伊川县| 鞍山市| 库尔勒市| 威信县| 固始县| 秀山| 即墨市| 伊川县| 霞浦县| 南投市| 普陀区| 旅游| 营山县| 江西省| 潜山县| 万州区| 遂宁市| 奎屯市| 莱阳市| 互助| 北辰区| 额敏县| 桃江县| 阳信县| 鸡西市| 霞浦县| 蓬安县| 农安县| 涞水县| 澄城县| 龙岩市| 卢龙县| 香格里拉县| 资中县| 稷山县| 温宿县| 昭苏县| 时尚|