亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Java使用Semaphore對單接口進行限流

瀏覽:10日期:2022-08-08 18:07:40
目錄一、實戰說明1.1 效果說明1.2 核心知識點二、 環境搭建三、限流演示3.1 并發請求工具3.2 效果示例圖一、實戰說明1.1 效果說明

本篇主要講如何使用Semaphore對單接口進行限流,例如有如下場景a. A系統的有a接口主要給B系統調用,現在希望對B系統進行限流,例如處理峰值在100,超過100的請求快速失敗b. 接口作為總閘入口,希望限制所有外來訪問,例如某個房間只能同時100個玩家在線,只有前面的處理完后面的才能繼續請求c. 其他類型場景,也就是資源固定的情況下需要輪流使用資源的可以采用Semaphore

不適用場景a. 由于是針對總入口進行限流,所以不能根據IP或者token等進行限流,適用場景比較固定b. 后續的博客中會介紹如何使用其他的針對IP/Token級別的限流,例如AOP+Redis+Lua進行限流

優點主要有a. 相比針對IP級別的限流,Semaphore實現相對簡單,對上述場景能快速實現限流效果

實現難度:3顆星

1.2 核心知識點

主要使用以下技術點a. springbootb. juc包中的Semaphore(tryAcquire、release方法)

Semaphore主要說明a. Semaphore中可以通過tryAcquire和acquire獲取到一個許可證(默認),通過release釋放許可證b. 兩個獲取許可證的主要區別就是前者是非阻塞而后者阻塞,如果我們要實現快速失敗的效果,就必須使用非阻塞獲取許可證方法注意點a. 一定要確保release方法被調用,例如放到finally中,否則許可證得不到釋放,將會導致接口被全部陷死,無法接收請求

二、 環境搭建

環境使用idea+spring initializr創建新建springboot web項目

Java使用Semaphore對單接口進行限流

Java使用Semaphore對單接口進行限流

Java使用Semaphore對單接口進行限流

包目錄說明

Java使用Semaphore對單接口進行限流

新建SemaphoreController,請求路徑為limita. 注意點已經代碼注釋說明

package com.codecoord.semaphore.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.Semaphore;/** * 限流側測試 * * @author tianxincode@163.com * @since 2020-08-06 */@RestControllerpublic class SemaphoreController { /** * 最大信號量,例如此處3,生成環境可以做成可配置項,通過注入方式進行注入 */ private static final int MAX_SEMAPHORE = 3; /** * Semaphore主限流,全局就行 */ private static final Semaphore SEMAPHORE = new Semaphore(MAX_SEMAPHORE); @RequestMapping('/limit') public String limit() {// 01.使用非阻塞tryAcquire,如果獲取不到就快速返回失敗if (!SEMAPHORE.tryAcquire()) { return '請求頻率超過限制:' + MAX_SEMAPHORE;}// 02. 如果能進入到這里,說明一定獲取到了許可證/// todo 可能的參數校驗,注意如果參數校驗不通過,一定要調用release方法/*if (valid(xxx)) { SEMAPHORE.release();}*/try { // 03. 模擬業務處理,假如需要1s Thread.sleep(1000); return '業務處理成功';} catch (InterruptedException e) { // 錯誤處理 return '業務處理失敗';} finally { // 04. 一定要釋放,否則導致接口假死無法處理請求 SEMAPHORE.release();} }}三、限流演示3.1 并發請求工具

并發請求將基于apache-jmeter-5.2.1進行測試,jmeter的使用相對簡單,請讀者自行百度

此處線程組的線程數量為10個,真實環境中根據需要調整配置大小

Java使用Semaphore對單接口進行限流

Java使用Semaphore對單接口進行限流

3.2 效果示例圖

啟動測試,可以看到處理成功的只有三個,剩下7個全部失敗a. 請求成功

Java使用Semaphore對單接口進行限流

b. 請求失敗

Java使用Semaphore對單接口進行限流

到此這篇關于Java使用Semaphore對單接口進行限流的文章就介紹到這了,更多相關Java 單接口限流內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 台湾小明看看 | 九九久久国产精品免费热6 九九天天影视 | 亚洲图色网站 | 精品久久久久久国产91 | 久久亚洲国产 | 亚洲精品国产成人一区二区 | 欧美视频一区 | 久久久久日韩精品免费观看网 | 亚洲最新视频在线观看 | 亚洲国产精品一区二区九九 | 国产爽片在线观看 | 欧美日韩在线免费观看 | 视频一区二区三区蜜桃麻豆 | 国产亚洲精品美女一区二区 | 国产精品久久不卡日韩美女 | 网友自拍区一区二区三区 | 国产综合在线视频 | 精品美女在线观看 | 午夜国产在线视频 | 国产younv交在线视频 | 日韩激情视频在线 | 免费观看日本人成影片 | 国产精品福利在线观看免费不卡 | 麻豆视频链接 | www.草逼.com| 亚洲国产精品二区久久 | 国产又黄又爽又色视频免费观看 | 乱理最新乱理片中文 | 91尤物国产尤物福利在线 | 91精品国产自产91精品 | www.香蕉视频在线观看 | 国产伦码精品一区二区 | 韩国福利影视一区二区三区 | 欧美精品在线免费观看 | 4虎成人| 午夜a爱 | 久久午夜国产片 | 亚洲国内| 五月婷婷俺也去开心 | 亚洲国产精品第一区二区 | 国产成人久久精品区一区二区 |