精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

神器!API接口限流就是這么簡單

開發(fā) 前端
訪問速率限制是一種API訪問限制的策略。它限制客戶端在一定時間內調用 API 的次數(shù)。這有助于保護應用程序接口,防止無意或惡意的過度使用。

環(huán)境:SpringBoot3.2.5

1. 簡介

訪問速率限制是一種API訪問限制的策略。它限制客戶端在一定時間內調用 API 的次數(shù)。這有助于保護應用程序接口,防止無意或惡意的過度使用。

速率限制通常是通過跟蹤 IP 地址或更具體的業(yè)務方式(如 API 密鑰或訪問令牌等方式)來應用于 API 的。作為 API 開發(fā)人員,當客戶端達到限制時,我們有幾種選擇:

  • 請求排隊,直到剩余時間結束(這也是最常用的方式)
  • 拒絕請求(HTTP 429 請求過多)

本篇文章將介紹一款開源的組件Bucket4j,該組件提供了強大的限流功能。基于基于令牌桶算法。既可用于獨立的 JVM 應用程序,也可用于集群環(huán)境。它還通過 JCache(JSR107)規(guī)范支持內存或分布式緩存。

令牌桶算法

假設我們有一個 "桶",其容量被定義為可容納的令牌數(shù)量。每當消費者想要訪問 API 端點時,就必須從桶中獲取一個令牌。如果有令牌,我們就會從數(shù)據(jù)桶中移除令牌,并接受請求。反之,如果程序桶中沒有令牌,我們就會拒絕請求。

在請求消耗令牌(token)的同時,我們也在以某種固定的速度補充令牌。

考慮一個速率限制為每分鐘 100 個請求的應用程序接口。我們可以創(chuàng)建一個容量為 100 的水桶,每分鐘填充 100 個令牌。如果我們在一分鐘內收到 70 個請求,少于可用令牌的數(shù)量,那么在下一分鐘開始時,我們只需再添加 30 個令牌,就能使水桶達到容量。另一方面,如果我們在 40 秒內用完了所有令牌,我們將等待 20 秒來重新裝滿令牌桶。

接下來將詳細介紹在Spring Boot中如何使用Bucket4j實現(xiàn)限流。

2. 實戰(zhàn)案例

2.1 環(huán)境準備

引入依賴

<dependency>
  <groupId>com.giffing.bucket4j.spring.boot.starter</groupId>
  <artifactId>bucket4j-spring-boot-starter</artifactId>
  <version>0.12.7</version>
</dependency>
<dependency>
  <groupId>com.bucket4j</groupId>
  <artifactId>bucket4j-redis</artifactId>
  <version>8.10.1</version>
</dependency>
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
</dependency>
<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-core</artifactId>
</dependency>

接下來的案例是基于redis的,所以引入了jedis。你也可以是lettuce或者是redisson但是這2個貌似需要是webflux環(huán)境。

jedis配置

@Bean
public JedisPool jedisPool(
    @Value("${spring.data.redis.port}") Integer port,
    @Value("${spring.data.redis.host}") String host,
    @Value("${spring.data.redis.password}") String password,
    @Value("${spring.data.redis.database}") Integer database
  ) {
  // buildPoolConfig方法自己進行配置吧
  final JedisPoolConfig poolConfig = buildPoolConfig();
  return new JedisPool(poolConfig, host, port, 60000, password, database);
}

以上基礎環(huán)境就準備好了,接下來就可以進行規(guī)則配置。而規(guī)則的配置可以基于2中方式,基于配置文件和基于注解(AOP)。

定義接口

@RestController
@RequestMapping("/products")
public class ProductController {


  @GetMapping("/{id}")
  public Product getProduct(@PathVariable Integer id) {
    return new Product(id, "商品 - " + id, BigDecimal.valueOf(new Random().nextDouble(1000))) ;
  }
}

接下來我將基于上面的接口進行限流的配置。

2.2 基于配置文件

基于配置文件的規(guī)則配置底層實現(xiàn)是通過Filter。

bucket4j:
  cache-to-use: redis-jedis
  filter-config-caching-enabled: true
  filters:
  - cache-name: product_cache_name
    id: product_filter
    # 配置請求url的規(guī)則;這里底層是通過正則表達式進行匹配的
    url: /products/.*
    rate-limits:
    - 
      #這里的cache-key非常關鍵;用于區(qū)分不同請求的情況;
      #比如,這里我會根據(jù)不同的請求id來現(xiàn)在訪問速率
      #這里可以寫spel表達式,這里調用的是HttpServletRequest#getParameter方法
      cache-key: getParameter("id")
      bandwidths:
      #配置桶的容量
      - capacity: 2
        # 時間
        time: 30
        # 單位
        unit: seconds
        # 填充速度;這會每隔30秒進行填充
        refill-speed: interval

如何配置后,訪問/products/xxx接口,結果如下:

圖片圖片

圖片圖片

分別請求id為1,2時,如果超過了配置桶的容量,則默認顯示上面的錯誤消息,同時Redis中會分別記錄這2個key

圖片圖片

只有等到30s后才能繼續(xù)訪問。

修改默認的限流提示

bucket4j:
  filters:
  - cache-name: product_cache_name
    http-content-type: 'application/json;charset=utf-8'
    http-response-body: '{"code": -1, "message": "請求太快了"}'

注意:你必須同時要設置content-type設置字符編碼,否則會亂碼。

條件放行

你也可以通過如下屬性進行有條件的放行;

bucket4j:
  filters:
  - cache-name: product_cache_name
    rate-limits:
    - 
      skip-condition: 'getParameter("id").equals("6")'

當請求id的值為6時則跳過規(guī)則,直接方向。

以上是基于配置文件規(guī)則的應用,它還有很多其它的配置屬性,詳細查看官方文檔

https://github.com/MarcGiffing/bucket4j-spring-boot-starter

接下來介紹基于注解的方式。

2.3 基于注解

通過"@RateLimiting"注解,AOP 可以攔截目標方法。這樣,你就可以全面訪問方法參數(shù),輕松定義速率限制鍵或有條件地跳過速率限制。

配置文件中配置規(guī)則

bucket4j:
  methods:
  - name: storage_rate #在代碼中會通過該名稱引用
    cache-name: storage_cache_name
    rate-limit:
      bandwidths:
      - capacity: 2
        time: 30
        unit: seconds
        refill-speed: interval

接口注解,配置限流

@RateLimiting(
    name = "storage_rate", 
    cacheKey = "'storage-' + #id",
    skipCondition = "#name eq 'admin'",
    ratePerMethod = true,
    fallbackMethodName = "getStorageFallback"
  )
@GetMapping("/{id}")
public R<Storage> getStorage(@PathVariable Integer id, String name) {
  return R.success(new Storage(id, "SP001 - " + id, new Random().nextInt(10000))) ;
}
// 回退方法的簽名必須與業(yè)務方法一致
public R<Storage> getStorageFallback(Integer id, String name) {
  return R.failure(String.format("請求id=%d,name=%s被限流", id, name)) ;
}

skipCondition:該屬性定義了如果請求的name的值為admin則跳過,不限流。

圖片圖片

圖片圖片

@RateLimiting注解還可以應用到類中,這樣該類中的所有方法都會被限流,如下示例:

@Service
@RateLimiting(
    name = "storage_rate", 
    cacheKey = "getName",
    ratePerMethod = false
  )
public class StorageService {


  public Storage queryStorageById(Integer id) {
    return new Storage(id, "SP001 - " + id, new Random().nextInt(10000)) ;
  }
  
  @IgnoreRateLimiting
  public List<Storage> queryStorages() {
    return List.of(
        new Storage(1, "SP001 - " + 1, new Random().nextInt(10000)),
        new Storage(2, "SP002 - " + 2, new Random().nextInt(10000)),
        new Storage(3, "SP003 - " + 3, new Random().nextInt(10000))
      ) ;
  }
}

上面代碼queryStorageById會被限流,而queryStorages方法被@IgnoreRateLimiting注解標準,所以不會被限流。

關于Bucket4j就介紹這么多,它還有非常多的其它功能,你可以參考官方文檔進行查看。

責任編輯:武曉燕 來源: Spring全家桶實戰(zhàn)案例源碼
相關推薦

2024-09-09 11:35:35

2024-12-03 08:43:49

2023-08-21 08:01:03

2021-05-24 10:50:10

Git命令Linux

2017-11-28 15:29:04

iPhone X網(wǎng)頁適配

2020-06-16 10:57:20

搭建

2016-07-22 15:12:12

Win10技巧重裝

2019-05-27 14:03:48

開發(fā)技能代碼

2021-02-26 10:21:35

比特幣投資金融

2021-12-27 07:31:37

JavaNeo4J數(shù)據(jù)庫

2023-08-26 21:42:08

零拷貝I/O操作

2020-04-20 10:47:57

Redis數(shù)據(jù)開發(fā)

2021-10-28 19:23:27

界面嵌入式 UI

2019-05-13 08:24:58

數(shù)據(jù)庫MySQLInnoDB

2023-07-27 08:26:36

零拷貝I/O操作

2024-02-27 08:14:51

Nginx跨域服務

2020-07-27 07:00:00

超文本鏈接Word文檔網(wǎng)絡

2013-06-09 10:34:24

華為網(wǎng)絡規(guī)劃企業(yè)ICT

2020-06-17 11:42:50

異常解析器Spring MVC

2017-11-06 16:30:33

開源
點贊
收藏

51CTO技術棧公眾號

久热国产精品视频一区二区三区| 国内精品久久久久伊人av| 中文字幕第88页| 免费观看成人高潮| 国产剧情一区二区| 91国内产香蕉| 少妇高潮一区二区三区喷水| 91精品导航| 欧美亚洲愉拍一区二区| 免费的av在线| 国产爆初菊在线观看免费视频网站| 精品一区二区三区免费视频| 4438全国亚洲精品在线观看视频| 麻豆网址在线观看| 天堂俺去俺来也www久久婷婷| 91高清视频在线| 国产精品视频一二三四区| 国产免费a∨片在线观看不卡| 国产美女精品一区二区三区| 国产不卡一区二区在线播放| 国产中文字幕免费| 国产精品久久观看| 国产午夜精品一区理论片飘花| 被黑人猛躁10次高潮视频| 欧美电影免费观看| 亚洲成人免费电影| 国产性生活免费视频| 日韩三级影院| 日本一区二区三区dvd视频在线| 国产v亚洲v天堂无码| 做爰无遮挡三级| 红桃视频欧美| 欧美猛少妇色xxxxx| 日本一二三不卡视频| 亚欧洲精品视频在线观看| 亚洲精品一区二区三区香蕉 | www.涩涩爱| 亚洲精品456| 亚洲国产精品人久久电影| 中文字幕欧美视频| 在线免费成人| 欧美精品xxxxbbbb| 免费看涩涩视频| 亚洲精品国产嫩草在线观看| 岛国av一区二区在线在线观看| 免费cad大片在线观看| 日本在线视频站| 国产精品久久久久久亚洲毛片| 日韩欧美第二区在线观看| 九九在线视频| 国产欧美日韩亚州综合| 欧美在线播放一区| 女人偷人在线视频| 久久婷婷综合激情| 久久一区二区精品| 日韩二区三区| 久久一日本道色综合| 欧美日韩大片一区二区三区| 青青国产在线| 91麻豆swag| 欧美在线视频一区二区三区| 番号在线播放| 综合中文字幕亚洲| 300部国产真实乱| 色爱综合区网| 五月天激情小说综合| 亚洲午夜精品久久久久久人妖| 日本а中文在线天堂| 日韩欧美综合在线视频| 午夜免费精品视频| 中文字幕成人| 精品对白一区国产伦| 国产在线观看无码免费视频| 欧美人与物videos另类xxxxx| 国产小视频国产精品| 欧美乱大交做爰xxxⅹ小说| 婷婷精品进入| 久久男人av资源网站| 一级片视频在线观看| 日日欢夜夜爽一区| 国产欧美在线播放| 精品欧美在线观看| 久久人人爽爽爽人久久久| 日韩在线第一区| 中文字幕免费高清电视剧网站在线观看| 亚洲午夜激情网页| 日本www.色| 秋霞影院一区| 亚洲另类激情图| 成年人免费视频播放| 黄色国产精品| 国产精品久久久久久久久久99| 国产农村妇女毛片精品久久| 99久久精品免费精品国产| 水蜜桃亚洲一二三四在线| 操你啦视频在线| 欧美小视频在线| 色噜噜狠狠一区二区三区狼国成人| 亚洲精选av| 亚洲图中文字幕| 久久中文字幕无码| 美女免费视频一区| 久久精品成人一区二区三区蜜臀| 五月婷婷在线观看| 日韩欧美一区二区三区| 在线播放黄色av| 国产成人影院| 久久久久久国产精品美女| 在线观看一二三区| 99久久99久久免费精品蜜臀| 欧美 另类 交| 蜜桃精品在线| 亚洲二区在线播放视频| 国产美女久久久久久| 欧美综合二区| 国产成人精品免费视频大全最热 | 中文字幕在线免费不卡| 成人毛片视频网站| 51亚洲精品| 久久视频在线看| 国产女优在线播放| 91麻豆免费观看| a天堂资源在线观看| 国产精品视频一区视频二区 | 在线不卡一区二区| 色欲AV无码精品一区二区久久| 一本色道久久综合亚洲精品不卡| 亚洲综合一区二区不卡| 日本在线免费看| 在线观看亚洲一区| 免费看污黄网站在线观看| 国内精品久久久久久久97牛牛| 成人黄色在线观看| 日韩黄色影院| 欧美精品在欧美一区二区少妇| 在线不卡av电影| 中文欧美日韩| 精品麻豆av| 久草在线中文最新视频| 亚洲国产精品久久久| av资源吧首页| av网站一区二区三区| 日韩精品一区在线视频| 高潮久久久久久久久久久久久久| 欧美丰满少妇xxxx| 亚洲乱码精品久久久久..| 亚洲免费三区一区二区| 成人免费播放视频| 欧美人成在线| 国产精品视频免费观看| 超碰资源在线| 亚洲免费福利视频| 一级特黄免费视频| 亚洲国产电影在线观看| 极品粉嫩美女露脸啪啪| 欧美电影免费| av一本久道久久波多野结衣| 四季久久免费一区二区三区四区| 精品剧情v国产在线观看在线| 久久久精品国产sm调教| 成人免费va视频| 精品国产免费av| 精品视频免费| 91免费精品国偷自产在线| 91在线中文| 国产精品白丝av嫩草影院| 亚洲色图国产精品| 中文字字幕在线中文乱码| 最新国产精品久久精品| 国产精品一区二区无码对白| 国产亚洲午夜| 影音欧美亚洲| 136国产福利精品导航网址应用| 国模极品一区二区三区| 国产视频第一区| 91精品国产高清一区二区三区蜜臀| 欧美日韩一级大片| 91麻豆文化传媒在线观看| 一本岛在线视频| 欧美在线三区| 蜜桃传媒视频麻豆第一区免费观看| 成人免费一区| 久久久久久久久久久国产| 国产视频三级在线观看播放| 欧美精品第1页| 三级黄色在线视频| 国产精品的网站| 国产午夜在线一区二区三区| 日本特黄久久久高潮 | 激情综合在线| 亚洲欧洲精品一区二区三区波多野1战4| 久久伦理中文字幕| 欧美综合第一页| 国产成人l区| 亚洲色图15p| 成 人 黄 色 片 在线播放| 欧美性猛交丰臀xxxxx网站| 97在线观看免费高| 久久久久久久久免费| 91福利视频免费观看| 日本va欧美va瓶| 热99这里只有精品| 中文字幕一区二区三三| 日韩片电影在线免费观看| 天堂精品在线视频| 国产精品丝袜高跟| 成人av免费电影网站| 久久99热精品| 日本蜜桃在线观看| 亚洲香蕉av在线一区二区三区| 亚洲精品国产精品国| 欧美群妇大交群中文字幕| 欧美另类一区二区| 夜夜嗨av一区二区三区网页| 麻豆一区在线观看| 久久久久久亚洲综合影院红桃| 久久久无码人妻精品无码| 久久aⅴ国产欧美74aaa| 日韩在线xxx| 99精品99| 国产日韩欧美精品在线观看| 欧美高清日韩| 最新不卡av| 四季av一区二区凹凸精品| 欧美连裤袜在线视频| 精品视频高潮| 国产精品乱码视频| 99精品国产一区二区三区2021| 成人免费xxxxx在线观看| 69堂精品视频在线播放| 国产成人a亚洲精品| 成人线上视频| 2020久久国产精品| 国模私拍一区二区国模曼安| 美日韩精品免费视频| 超碰人人在线| 久久高清视频免费| av在线网址观看| 久久在线精品视频| caoporn免费在线| 欧美成人在线免费视频| www.久久久久.com| 色综合天天狠天天透天天伊人| 国产网友自拍视频导航网站在线观看| 久久精品国产精品| 国产精品一区二区三区视频网站| 日韩视频一区在线| 国产成人高清精品| 欧美丰满片xxx777| 免费看男女www网站入口在线| 2018国产精品视频| 欧美二三四区| 国产精品中文字幕久久久| 日韩久久99| 444亚洲人体| xxxx日韩| 欧美另类一区| 欧美电影免费| 久久国产午夜精品理论片最新版本| 日韩午夜高潮| 久久婷婷国产91天堂综合精品| 麻豆一区二区在线| 国产乱码一区二区三区四区| 粉嫩13p一区二区三区| 成人在线电影网站| 久久久久久久性| 我要看一级黄色录像| 伊人婷婷欧美激情| 99热在线观看免费精品| 欧洲亚洲精品在线| 国产伦理吴梦梦伦理| 精品999在线播放| 九色在线视频蝌蚪| 精品国产一区久久久| 伦理av在线| 国产成人av在线| 五月亚洲婷婷| 日本不卡在线播放| 久久久久久久久久久妇女| 成人午夜精品久久久久久久蜜臀| 久久精品五月| 97人人模人人爽人人澡| 99精品视频一区二区三区| 中文字幕第二区| 亚洲一区在线看| 中文字幕人妻一区二区在线视频| 欧美成人伊人久久综合网| 男男激情在线| 色综合91久久精品中文字幕 | 5858s免费视频成人| 色欲久久久天天天综合网| 在线亚洲午夜片av大片| 欧美xxxx免费虐| 国产精品免费看久久久香蕉| 911亚洲精品| 在线观看日韩片| 媚黑女一区二区| 污视频在线观看免费网站| 久久久99免费| 精品少妇久久久| 欧美日韩国产一级| 欧美巨乳在线| 国语自产精品视频在线看抢先版图片 | 国产精品伦子伦| 亚洲人亚洲人成电影网站色| 精品国产xxx| 亚洲国产美女精品久久久久∴| 麻豆网站在线观看| 国产精品99一区| 日韩精品免费一区二区三区竹菊| 在线观看污视频| 蜜臀av国产精品久久久久| 影音先锋黄色资源| 亚洲精品日产精品乱码不卡| 99re热视频| 亚洲美女精品成人在线视频| 91桃色在线| 成人情视频高清免费观看电影| 香蕉综合视频| 久久人人爽av| 国产精品天天摸av网| 日本一区二区免费电影| 亚洲国产精品久久久| 国产色婷婷在线| 成人动漫视频在线观看完整版| 久久久久午夜电影| 国产福利在线免费| 国产喷白浆一区二区三区| 在线观看 亚洲| 日韩国产欧美区| 松下纱荣子在线观看| 精品国产乱码久久久久久久软件| 黄色成人av网站| 国产免费a级片| 亚洲一区视频在线观看视频| www日本视频| 欧美日韩成人在线播放| 欧美高清一级片| 999久久欧美人妻一区二区| 国产精品资源在线观看| 久久国产精品国语对白| 91精品国产入口在线| 黄视频在线观看网站| 91色中文字幕| 欧美黄色一区二区| 免费啪视频在线观看| 亚洲第一av色| 婷婷婷国产在线视频| 国产成人综合亚洲| 欧美中文一区二区| 亚洲美女爱爱视频| 综合色中文字幕| 亚洲av无码乱码国产麻豆| 欧美激情手机在线视频 | 成人高清免费观看| 国产成人精品片| 亚洲视频一区二区| 成人在线免费| 青青草影院在线观看| 高清成人在线观看| 欧美精品一二三四区| 中文字幕日韩电影| 精品国产乱码一区二区三区| 国产成a人亚洲精v品在线观看| 99re8在线精品视频免费播放| 91午夜精品亚洲一区二区三区| 在线视频国产日韩| 久久9999免费视频| ww国产内射精品后入国产| 国产无人区一区二区三区| 一区二区三区精| 欧美黄色片免费观看| 人人精品亚洲| 日本激情综合网| 亚洲香肠在线观看| 国产福利小视频在线观看| 成人激情视频网| 在线视频亚洲| 91香蕉一区二区三区在线观看| 亚洲成人网av| 97欧美成人| 全黄性性激高免费视频| 国产精品视频免费看| 欧性猛交ⅹxxx乱大交| 国产精品流白浆视频| 亚洲精品麻豆| 欧美xxxooo| 亚洲九九九在线观看| 精品视频一区二区三区| 日韩免费毛片视频| 亚洲欧美日韩一区二区三区在线观看 | 久久成人羞羞网站| 国产无码精品视频| 日韩中文字幕亚洲| 亚洲人成网www| 国产高潮失禁喷水爽到抽搐| 欧美日韩一区精品| 伊人网在线播放| 欧美一区二区三区综合| 国产欧美一二三区|