国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - SpringMVC 限流的示例代碼

SpringMVC 限流的示例代碼

2021-02-26 12:51dounine JAVA教程

這篇文章主要介紹了SpringMVC 限流的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在使用SpringBoot做接口訪問如何做接口的限流,這里我們可以使用google的Guava包來實現,當然我們也可以自己實現限流,Guava中的限流是久經考驗的我們沒必需重新再去寫一個,如果想了解限流原理的同學可以自己查閱一下相關的資料,本文不作過來說明噢。

使用說明

在項目中引入Guava相關包

http://mvnrepository.com/artifact/com.google.guava/guava/21.0

maven項目

?
1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>21.0</version>
</dependency>

gradle項目

?
1
2
// https://mvnrepository.com/artifact/com.google.guava/guava
compile group: 'com.google.guava', name: 'guava', version: '21.0'

寫一個SpringMVC的攔截器

SmoothBurstyInterceptor.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import com.google.common.util.concurrent.RateLimiter;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.concurrent.TimeUnit;
 
public class SmoothBurstyInterceptor extends HandlerInterceptorAdapter {
 
  public enum LimitType {
    DROP,//丟棄
    WAIT //等待
  }
 
  /**
   * 限流器
   */
  private RateLimiter limiter;
  /**
   * 限流方式
   */
  private LimitType limitType = LimitType.DROP;
 
  public SmoothBurstyInterceptor() {
    this.limiter = RateLimiter.create(10);
  }
 
  /**
   * @param tps    限流量 (每秒處理量)
   * @param limitType 限流類型:等待/丟棄(達到限流量)
   */
  public SmoothBurstyInterceptor(int tps, SmoothBurstyInterceptor.LimitType limitType) {
    this.limiter = RateLimiter.create(tps);
    this.limitType = limitType;
  }
  /**
   * @param permitsPerSecond 每秒新增的令牌數
   * @param limitType 限流類型:等待/丟棄(達到限流量)
   */
  public SmoothBurstyInterceptor(double permitsPerSecond, SmoothBurstyInterceptor.LimitType limitType) {
    this.limiter = RateLimiter.create(permitsPerSecond, 1000, TimeUnit.MILLISECONDS);
    this.limitType = limitType;
  }
 
 
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    if (limitType.equals(LimitType.DROP)) {
      if (limiter.tryAcquire()) {
        return super.preHandle(request, response, handler);
      }
    } else {
      limiter.acquire();
      return super.preHandle(request, response, handler);
    }
    throw new Exception("網絡異常!");//達到限流后,往頁面提示的錯誤信息。
  }
 
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    super.postHandle(request, response, handler, modelAndView);
  }
 
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    super.afterCompletion(request, response, handler, ex);
  }
 
  public RateLimiter getLimiter() {
    return limiter;
  }
 
  public void setLimiter(RateLimiter limiter) {
    this.limiter = limiter;
  }
}

SpringMVC攔截配置

WebConfig.java

?
1
2
3
4
5
6
7
8
9
10
11
12
@Component
public class WebConfig extends WebMvcConfigurerAdapter {
 
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // 多個攔截器組成一個攔截器鏈
    registry.addInterceptor(new SmoothBurstyInterceptor(100, SmoothBurstyInterceptor.LimitType.DROP)).addPathPatterns("/**");
    //限流可配置為SmoothBurstyInterceptor.LimitType.DROP丟棄請求或者SmoothBurstyInterceptor.LimitType.WAIT等待,100為每秒的速率
    super.addInterceptors(registry);
  }
 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/dounine/article/details/71439809

延伸 · 閱讀

精彩推薦
  • JAVA教程詳解maven的install的作用

    詳解maven的install的作用

    這篇文章主要介紹了詳解maven的install的作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小...

    sky_jiangcheng4422020-09-05
  • JAVA教程Springmvc自定義類型轉換器實現步驟

    Springmvc自定義類型轉換器實現步驟

    這篇文章主要介紹了Springmvc自定義類型轉換器實現步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可...

    白熊啊2982020-08-31
  • JAVA教程Jsoup解析html實現招聘信息查詢功能

    Jsoup解析html實現招聘信息查詢功能

    這篇文章主要為大家詳細介紹了Jsoup解析html實現招聘信息查詢功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    海闊天空3052402020-09-13
  • JAVA教程詳解JavaWeb中的 Listener

    詳解JavaWeb中的 Listener

    JavaWeb里面的listener是通過觀察者設計模式進行實現的。下面通過本文給大家詳細介紹javaweb中的listener,感興趣的朋友一起看看吧 ...

    南唐三少2952020-06-18
  • JAVA教程struts2中使用注解配置Action方法詳解

    struts2中使用注解配置Action方法詳解

    這篇文章主要介紹了struts2中使用注解配置Action方法詳解,涉及一個示例,具有一定參考價值,需要的朋友可以了解下。...

    黃小魚ZZZ4652021-01-22
  • JAVA教程struts2實現文件下載功能

    struts2實現文件下載功能

    這篇文章主要為大家詳細介紹了struts2實現文件下載功能,一個非常常見的功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    hzc5438060533302020-09-02
  • JAVA教程java基于socket傳輸zip文件功能示例

    java基于socket傳輸zip文件功能示例

    這篇文章主要介紹了java基于socket傳輸zip文件功能,結合實例形式分析了java使用socket進行文件傳輸的具體操作步驟與服務器端、客戶端相關實現技巧,需要的朋...

    小魏的馬仔4432020-11-27
  • JAVA教程Java編程實現調用com操作Word方法實例代碼

    Java編程實現調用com操作Word方法實例代碼

    這篇文章主要介紹了Java編程實現調用com操作Word方法實例代碼,代碼注釋很詳細,在這里分給大家,需要的朋友可以參考下。...

    Gavinjou大笨象6682021-01-06
主站蜘蛛池模板: 国产亚洲精品久久久久久久 | 欧美日韩高清 | 日韩欧美国产一区二区三区 | 成年人在线看 | 日本一区二区视频免费观看 | 亚洲小视频 | 在线中文 | 天天艹在线| 国产精品18久久久久久首页狼 | 日韩精品 电影一区 亚洲 | 久久久久久免费视频 | 色在线播放 | 成年人在线观看免费视频 | 欧美精品亚洲精品 | 中文字幕日韩欧美 | 一区二区在线 | 久久精彩免费视频 | 亚洲国产欧美日韩 | 日韩中文字幕一区二区 | 久久精品久久久久久 | 婷婷激情五月 | 精品久草 | 国产精品网站在线观看 | 欧美激情高清 | 国产 一区 | 在线一区观看 | 国产综合久久久 | 亚洲欧洲tv | 日韩在线一区二区三区 | 精品一区二区三区成人精品 | 亚洲精品久久久久久久久久吃药 | 人人干视频 | 一区二区精品在线 | 亚洲欧美自拍偷拍 | 久草天堂 | 国产一区二区精品在线观看 | 亚洲色视频 | 91久久精品日日躁夜夜躁国产 | 精品国产一区二区三区久久久蜜 | 羞羞视频在线免费 | 亚洲电影天堂在线观看 |