一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - Java教程 - Javaweb應用使用限流處理大量的并發請求詳解

Javaweb應用使用限流處理大量的并發請求詳解

2021-02-03 11:25在遠行的路上 Java教程

這篇文章主要介紹了Javaweb應用使用限流處理大量的并發請求詳解,還是挺不錯的,這里分享給大家,供需要的朋友參考。

在web應用中,同一時間有大量的客戶端請求同時發送到服務器,例如搶購、秒殺等。這個時候如何避免將大量的請求同時發送到業務系統。

第一種方法:在容器中配置最大請求數,如果大于改請求數,則客戶端阻塞。該方法有效的阻止了大量的請求同時訪問業務系統,但對用戶不友好。

第二種方法:使用過濾器,保證一定數量的請求能夠正常訪問系統,多余的請求先跳轉到排隊頁面,由排隊頁面定時發起請求。過濾器實現如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class ServiceFilter implements Filter {
    
    private static final int MAX_COUNT = 20;
    
    private AtomicInteger filterCount = 0;
 
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        System.out.println("before"+filterCount);
        if(filterCount > MAX_COUNT) {
            //請求個數太多,跳轉到排隊頁面
            request.getRequestDispatcher("index.jsp").forward(request, response);
        } else {
            //請求個數加1
            filterCount.incrementAndGet();
 
            chain.doFilter(request, response);
            //訪問結束,請求個數減1
            filterCount.decrementAndGet();
        }
    }

此種方式的實現就是限流。可以參考RateLimiter的令牌桶限流策略的實現。

?
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
public class RateLimiterUtils {
    private static Logger logger = LoggerFactory.getLogger(RateLimiterUtils.class);
    private static final ConcurrentHashMap<String, RateLimiter> resourceLimitMap =
            new ConcurrentHashMap<String, RateLimiter>();
    
    /**
     * 限流
     * @param resource 需要限流的對象的標識
     * @return true表示得到了許可,沒有達到限流閥值,false表示得不到許可,達到了限流閥值。
     * @author: hejinen
     * @date:2016年10月19日 上午11:08:49
     */
    public static boolean rateLimit(String resource) {
        RateLimiter limit = getRateLimit(resource);
        return limit.tryAcquire();
    }
    /**
     * 獲取某個需限流對象的RateLimiter,如不存在則創建新的
     * @param resouce 需要限流的對象標識
     */
    public static RateLimiter getRateLimit(String resource) {
        RateLimiter limit = resourceLimitMap.get(resource);
        if(limit == null) {
            synchronized(RateLimiterUtils.class) {
                limit = resourceLimitMap.get(resource);
                double qps = getQpsByResource(resource);
                if(limit == null) {
                    limit = RateLimiter.create(qps);
                    resourceLimitMap.put(resource, limit);
                    LoggerUtil.info(RateLimiterUtils.class, "create rate limiter for key:{0},QPS:{1}", resource,qps);
                }
            }
        }
        return resourceLimitMap.get(resource);
    }
}

總結

以上就是本文關于Javaweb應用使用限流處理大量的并發請求詳解的全部內容,希望對大家有所幫助。有什么問題可以隨時留言,小編會及時回復大家的。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/lzy_lizhiyang/article/details/47951423

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品嫩草影院在线 | 校花被拖到野外伦小说 | 亚洲成人网页 | 男人摸女人下面 | 国产亚洲精品综合在线网址 | 涩情主播在线翻车 | 欧美三级小视频 | 色老板成人永久免费视频 | 日本动漫打扑克动画片樱花动漫 | 国产成人成人一区二区 | 4虎影院永久地址www | 爱爱调教 | 欧美视频在线一区二区三区 | 欧美性xxx狂流白浆 欧美性f | 女教师的一级毛片 | 欧美视频久久 | 欧美一级视 | 深夜国产在线 | 国产精品福利在线观看入口 | 女生被草 | 2015台湾永久免费平台 | 韩国三级hd中文字幕李采潭 | 国产一区二区三区四 | 亚洲国产精品综合久久网络 | 大学生特黄特色大片免费播放 | 欧美专区在线视频 | 星星动漫在线观看无删减 | 日本漫画工囗全彩内番e绅 日本伦理动漫在线观看 | 成人中文字幕在线观看 | 国色天香论坛社区在线视频 | 爽好舒服把腿张小说 | 日本色频| 北条麻妃一区 | 亚洲午夜精品久久久久 | 国产青草视频在线观看免费影院 | 欧美日韩精品一区二区三区视频在线 | 国产成人精品午夜免费 | 国产男女乱淫真视频全程播放 | 欧美日韩国产在线人成 | 国产精品性视频免费播放 | 亚洲欧美日韩另类在线 |