AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

一個注解實現接口冪等,這樣才優雅!

來源: 責編: 時間:2023-08-05 11:46:08 4658觀看
導讀場景碼猿慢病云管理系統中其實高并發的場景不是很多,沒有必要每個接口都去考慮并發高的場景,比如添加住院患者的這個接口,具體的業務代碼就不貼了,業務偽代碼如下:圖片上述代碼有問題嗎?誰能說有問題?一般情況下是沒什么問題

場景

碼猿慢病云管理系統中其實高并發的場景不是很多,沒有必要每個接口都去考慮并發高的場景,比如添加住院患者的這個接口,具體的業務代碼就不貼了,業務偽代碼如下:GkS28資訊網——每日最新資訊28at.com

圖片圖片GkS28資訊網——每日最新資訊28at.com

上述代碼有問題嗎?誰能說有問題?一般情況下是沒什么問題,但是在高并發的場景下肯定是存在問題,為什么?GkS28資訊網——每日最新資訊28at.com

因為有事務的隔離性,step1這個階段對住院號的校驗肯定是存在問題的,在高并發的場景下無法保證這里的校驗一定準確。GkS28資訊網——每日最新資訊28at.com

其實這個接口的并發并不高,在碼猿慢病云管理系統中一般不會出現這種問題,那么什么時候會出現呢?GkS28資訊網——每日最新資訊28at.com

醫院中大部分是內網+外網,如果由于網絡的抖動,系統請求響應的時間延遲,這樣會導致醫護操作時會出現重復點擊的情況,比如1秒中之內由于第一次點添加患者這個按鈕沒反應,往往護士都會重復點擊,這種情況下是會出現問題。GkS28資訊網——每日最新資訊28at.com

這里我們就暫且不談對單個接口的冪等優化了,要想一個方案全局解決這個問題,在碼猿慢病云管理系統中其實只要保證這種并發不高的接口在一定時間段內保證冪等即可,比如5秒之內,這樣在5秒之內護士重復點擊就沒事。GkS28資訊網——每日最新資訊28at.com

解決方案

在碼猿慢病云管理系統中新增了一個注解:@RepeatSubmit,代碼如下:GkS28資訊網——每日最新資訊28at.com

圖片圖片GkS28資訊網——每日最新資訊28at.com

只需要將該注解標注在新增、修改、刪除接口上就能保證在默認的5秒之內接口冪等。GkS28資訊網——每日最新資訊28at.com

比如新增住院患者這個接口:GkS28資訊網——每日最新資訊28at.com

圖片圖片GkS28資訊網——每日最新資訊28at.com

那么原理是什么?其實很簡單,先來說下原理,再介紹具體的實現:GkS28資訊網——每日最新資訊28at.com

  1. AOP攔截增強@RepeatSubmit注解
  2. 獲取請求的URL、IP地址、請求參數
  3. 將請求URL、IP地址、請求參數以一定形式轉為key
  4. 借助Redis的setNx命令將key存入Redis,且設置失效時間
  5. 如果存入成功則允許訪問,失敗則拋出異常
  6. 全局異常捕獲,輸出指定信息給客戶端

上述6個步驟中其實只有一點比較難實現的,其他的都是基本操作,就是獲取這個請求參數,下面將詳細介紹一下如何獲取這個請求參數。GkS28資訊網——每日最新資訊28at.com

獲取請求參數

對于form-data的入參只需要調用HttpServletRequest的API讀取,但是對于@RequestBody標注的入參是通過IO流讀取數據,且IO流只能被讀取一次,如果在AOP中讀取了,那么在接口層面的入參讀取肯定是有問題,報錯如下:GkS28資訊網——每日最新資訊28at.com

圖片圖片GkS28資訊網——每日最新資訊28at.com

解決方案也很簡單,只需要保證IO流能夠多次讀取即可,下面就來介紹一下方案。GkS28資訊網——每日最新資訊28at.com

這里我們可以利用裝飾者模式對 HttpServletRequest 的功能進行增強,具體做法也很簡單,我們重新定義一個 HttpServletRequest:GkS28資訊網——每日最新資訊28at.com

圖片圖片GkS28資訊網——每日最新資訊28at.com

圖片圖片GkS28資訊網——每日最新資訊28at.com

這段代碼并不難,很好懂。GkS28資訊網——每日最新資訊28at.com

首先在構造 RepeatedlyRequestWrapper 的時候,就通過 IO 流將數據讀取出來并存入到一個 byte 數組中,然后重寫 getReader 和 getInputStream 方法,在這兩個讀取 IO 流的方法中,都從 byte 數組中返回 IO 流數據出來,這樣就實現了反復讀取了。GkS28資訊網——每日最新資訊28at.com

接下來我們定義一個過濾器,讓這個裝飾后的 Request 生效:GkS28資訊網——每日最新資訊28at.com

圖片圖片GkS28資訊網——每日最新資訊28at.com

判斷一下,如果請求數據類型是 JSON 的話,就把 HttpServletRequest “偷梁換柱”改為 HttpRequestWrapper,然后讓過濾器繼續往下走。GkS28資訊網——每日最新資訊28at.com

這樣就可以配置后就可以在程序中反復讀取參數了!GkS28資訊網——每日最新資訊28at.com

防重注解實現

解決了參數讀取的問題,下面就可以輕松實現這個防重注解了,首先定義注解com.code.ape.codeape.common.security.annotation.RepeatSubmit:GkS28資訊網——每日最新資訊28at.com

圖片圖片GkS28資訊網——每日最新資訊28at.com

接下來直接用AOP實現,com.code.ape.codeape.common.security.component.CodeapeRepeatSubmitAspect代碼如下:GkS28資訊網——每日最新資訊28at.com

圖片圖片GkS28資訊網——每日最新資訊28at.com

圖片圖片GkS28資訊網——每日最新資訊28at.com

邏輯很簡單,上述已經介紹過完整的流程,這里需要注意的是參數的讀取,代碼如下:GkS28資訊網——每日最新資訊28at.com

圖片圖片GkS28資訊網——每日最新資訊28at.com

其實就是將request判斷下是否是經過過濾器封裝后的HttpRequestWrapper對象,如果是的話則是@RequestBody入參,直接從IO流中讀取。GkS28資訊網——每日最新資訊28at.com

總結

本節內容介紹了防重注解@RepeatSubmit的實現原理,后續開發中只需要在非查詢接口中添加這個注解就能保證在一定時間內防止重復提交。GkS28資訊網——每日最新資訊28at.com

碼猿慢病云管理系統已經在星球中陸續更新,目前更新內容如下:GkS28資訊網——每日最新資訊28at.com

前言     01 項目架構+業務介紹     02 三方組件介紹     03 服務端項目部署     04 前端項目部署     05 多租戶架構設計     06 醫療系統中的權限如何設計?     07 項目搭建     08 關掉驗證碼登錄     09 開發平臺自動生成業務代碼認證鑒權     01 認證登錄生成token     02 token檢驗、鑒權     03 token有效期設置     04 刷新token     05 檢查token     06 服務中如何獲取當前登錄用戶信息?     07 接口對外暴露     08 接口只允許內部調用怎么處理?     09 如何實現token中繼?     10 當前登錄用戶身份信息如何異步傳遞?     11 科室權限如何定一個注解自動注入?     12 一個注解防止接口重復提交業務     01 科室管理     02 醫院管理     03 角色管理

GkS28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-146-0.html一個注解實現接口冪等,這樣才優雅!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 從零到英雄:高并發與性能優化的神奇之旅

下一篇: WebRTC.Net庫開發進階,教你實現屏幕共享和多路復用!

標簽:
  • 熱門焦點
  • 7月安卓手機性能榜:紅魔8S Pro再奪榜首

    7月份的手機市場風平浪靜,除了紅魔和努比亞帶來了兩款搭載驍龍8Gen2領先版處理器的新機之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機廠商修整的時間,進入8月份之
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 為什么你不應該使用Div作為可點擊元素

    按鈕是為任何網絡應用程序提供交互性的最常見方式。但我們經常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯過了許多內置瀏覽器的功能。
  • 阿里瓴羊One推出背后,零售企業迎數字化新解

    作者:劉曠近年來隨著數字經濟的高速發展,各式各樣的SaaS應用服務更是層出不窮,但本質上SaaS大多局限于單一業務流層面,對用戶核心關切的增長問題等則沒有提供更好的解法。在Saa
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯網那些事“起猛了,我能看得懂日語了”。“為什么日本人說話我能聽懂?”“中文不像中文,日語不像日語,但是我竟然看懂了”…&hell
  • 小米公益基金會捐贈2500萬元馳援北京、河北暴雨救災

    8月2日消息,今日小米科技創始人雷軍在其微博上發布消息稱,小米公益基金會宣布捐贈2500萬元馳援北京、河北暴雨救災。攜手抗災,京冀安康!以下為公告原文
  • 信通院:小米、華為等11家應用商店基本完成APP簽名及驗簽工作

    中國信通院表示,目前,小米、華為、OPPO、vivo、360手機助手、百度手機助手、應用寶、豌豆莢和努比亞等9家應用商店,以及抖音和快手2家新型應用分發平
  • onebot M24巧系列一體機采用輕薄機身設計,現已在各平臺開售

    onebot M24 巧系列一體機目前已在線上線下各平臺同步開售。onebot M24 巧系列采用一體化輕薄機身設計,最薄處為 10.15mm,擁有寶石紅、午夜藍、石墨綠、雅致
Top