激情久久久_欧美视频区_成人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
主站蜘蛛池模板: 久久国产精品久久精品国产演员表 | 久久精品女人天堂av | 国产免费福利视频 | 91久久国产露脸精品国产护士 | 99最新地址 | 一级毛片在线看 | 日韩一级片 | 免费看一级视频 | 视频一区国产精品 | 免费黄网站在线播放 | 97中文字幕在线观看 | 美女羞羞视频在线观看 | 成人毛片100部免费观看 | www.成人在线视频 | 国产精品久久久久久久久久东京 | 午夜天堂在线 | 久久综合给合久久狠狠狠97色69 | 国产亚洲精品久久 | 国产精品视频成人 | 日韩美香港a一级毛片免费 欧美一级淫片007 | 亚洲欧美在线视频免费 | 亚洲一级片免费观看 | 欧美一级做 | 免费黄色av | 国产一区二区三区撒尿在线 | 女人解衣喂奶电影 | 日韩视频一二三 | 欧美黄色大片免费观看 | 精品国产一区二区三区天美传媒 | 午夜a狂野欧美一区二区 | 色综合网在线观看 | 多男操一女视频 | 369看片你懂的小视频在线观看 | 日本不卡二区 | 午夜视频中文字幕 | 欧美黄色小视频 | 国产免费高清在线 | 亚洲一区在线免费视频 | 91九色蝌蚪国产 | 日本高清黄色片 | 国产精品地址 |