成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個注解實現(xiàn)接口冪等,這樣才優(yōu)雅!

開發(fā) 前端
本節(jié)內(nèi)容介紹了防重注解@RepeatSubmit的實現(xiàn)原理,后續(xù)開發(fā)中只需要在非查詢接口中添加這個注解就能保證在一定時間內(nèi)防止重復(fù)提交。

場景

碼猿慢病云管理系統(tǒng)中其實高并發(fā)的場景不是很多,沒有必要每個接口都去考慮并發(fā)高的場景,比如添加住院患者的這個接口,具體的業(yè)務(wù)代碼就不貼了,業(yè)務(wù)偽代碼如下:

圖片圖片

上述代碼有問題嗎?誰能說有問題?一般情況下是沒什么問題,但是在高并發(fā)的場景下肯定是存在問題,為什么?

因為有事務(wù)的隔離性,step1這個階段對住院號的校驗肯定是存在問題的,在高并發(fā)的場景下無法保證這里的校驗一定準(zhǔn)確。

其實這個接口的并發(fā)并不高,在碼猿慢病云管理系統(tǒng)中一般不會出現(xiàn)這種問題,那么什么時候會出現(xiàn)呢?

醫(yī)院中大部分是內(nèi)網(wǎng)+外網(wǎng),如果由于網(wǎng)絡(luò)的抖動,系統(tǒng)請求響應(yīng)的時間延遲,這樣會導(dǎo)致醫(yī)護操作時會出現(xiàn)重復(fù)點擊的情況,比如1秒中之內(nèi)由于第一次點添加患者這個按鈕沒反應(yīng),往往護士都會重復(fù)點擊,這種情況下是會出現(xiàn)問題。

這里我們就暫且不談對單個接口的冪等優(yōu)化了,要想一個方案全局解決這個問題,在碼猿慢病云管理系統(tǒng)中其實只要保證這種并發(fā)不高的接口在一定時間段內(nèi)保證冪等即可,比如5秒之內(nèi),這樣在5秒之內(nèi)護士重復(fù)點擊就沒事。

解決方案

在碼猿慢病云管理系統(tǒng)中新增了一個注解:@RepeatSubmit,代碼如下:

圖片圖片

只需要將該注解標(biāo)注在新增、修改、刪除接口上就能保證在默認(rèn)的5秒之內(nèi)接口冪等。

比如新增住院患者這個接口:

圖片圖片

那么原理是什么?其實很簡單,先來說下原理,再介紹具體的實現(xiàn):

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

上述6個步驟中其實只有一點比較難實現(xiàn)的,其他的都是基本操作,就是獲取這個請求參數(shù),下面將詳細(xì)介紹一下如何獲取這個請求參數(shù)。

獲取請求參數(shù)

對于form-data的入?yún)⒅恍枰{(diào)用HttpServletRequest的API讀取,但是對于@RequestBody標(biāo)注的入?yún)⑹峭ㄟ^IO流讀取數(shù)據(jù),且IO流只能被讀取一次,如果在AOP中讀取了,那么在接口層面的入?yún)⒆x取肯定是有問題,報錯如下:

圖片圖片

解決方案也很簡單,只需要保證IO流能夠多次讀取即可,下面就來介紹一下方案。

這里我們可以利用裝飾者模式對 HttpServletRequest 的功能進行增強,具體做法也很簡單,我們重新定義一個 HttpServletRequest:

圖片圖片

圖片圖片

這段代碼并不難,很好懂。

首先在構(gòu)造 RepeatedlyRequestWrapper 的時候,就通過 IO 流將數(shù)據(jù)讀取出來并存入到一個 byte 數(shù)組中,然后重寫 getReader 和 getInputStream 方法,在這兩個讀取 IO 流的方法中,都從 byte 數(shù)組中返回 IO 流數(shù)據(jù)出來,這樣就實現(xiàn)了反復(fù)讀取了。

接下來我們定義一個過濾器,讓這個裝飾后的 Request 生效:

圖片圖片

判斷一下,如果請求數(shù)據(jù)類型是 JSON 的話,就把 HttpServletRequest “偷梁換柱”改為 HttpRequestWrapper,然后讓過濾器繼續(xù)往下走。

這樣就可以配置后就可以在程序中反復(fù)讀取參數(shù)了!

防重注解實現(xiàn)

解決了參數(shù)讀取的問題,下面就可以輕松實現(xiàn)這個防重注解了,首先定義注解com.code.ape.codeape.common.security.annotation.RepeatSubmit:

圖片圖片

接下來直接用AOP實現(xiàn),com.code.ape.codeape.common.security.component.CodeapeRepeatSubmitAspect代碼如下:

圖片圖片

圖片圖片

邏輯很簡單,上述已經(jīng)介紹過完整的流程,這里需要注意的是參數(shù)的讀取,代碼如下:

圖片圖片

其實就是將request判斷下是否是經(jīng)過過濾器封裝后的HttpRequestWrapper對象,如果是的話則是@RequestBody入?yún)ⅲ苯訌腎O流中讀取。

總結(jié)

本節(jié)內(nèi)容介紹了防重注解@RepeatSubmit的實現(xiàn)原理,后續(xù)開發(fā)中只需要在非查詢接口中添加這個注解就能保證在一定時間內(nèi)防止重復(fù)提交。

碼猿慢病云管理系統(tǒng)已經(jīng)在星球中陸續(xù)更新,目前更新內(nèi)容如下:

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

責(zé)任編輯:武曉燕 來源: 碼猿技術(shù)專欄
相關(guān)推薦

2025-02-23 08:00:00

冪等性Java開發(fā)

2024-04-07 08:48:13

WebSocket集群MQ

2022-06-21 14:44:38

接口數(shù)據(jù)脫敏

2024-11-07 10:55:26

2024-11-08 15:56:36

2022-06-10 13:03:44

接口重試while

2021-04-20 10:50:38

Spring Boot代碼Java

2024-03-13 15:18:00

接口冪等性高并發(fā)

2022-04-25 11:26:16

開發(fā)SpringBoot

2022-05-16 10:45:22

Redis接口限流緩存

2023-08-21 08:01:03

2021-01-04 09:12:31

集合變量

2021-01-18 14:34:59

冪等性接口客戶端

2022-12-12 08:14:47

2024-06-24 01:00:00

2023-03-07 08:19:16

接口冪等性SpringBoot

2024-08-29 09:01:39

2025-03-11 08:20:58

2020-11-03 16:00:33

API接口微服務(wù)框架編程語言

2022-05-31 08:36:41

微服務(wù)網(wǎng)關(guān)鑒權(quán)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产农村一级片 | 日韩久久久久久 | 视频一区在线播放 | 日本久久综合 | 亚洲女人的天堂 | 盗摄精品av一区二区三区 | 成人免费视频网站在线观看 | 好姑娘影视在线观看高清 | 日韩欧美国产一区二区 | 在线中文字幕亚洲 | 亚洲午夜小视频 | 日韩午夜电影在线观看 | 国产精品亚洲二区 | 在线视频国产一区 | 国产精品久久久久av | 九色视频网 | 久久精品日产第一区二区三区 | 国产精品视频一区二区三区, | 国产日韩欧美一区二区 | 一区二区三区av夏目彩春 | 国产av毛片 | 国产精品区二区三区日本 | 久久精品国产清自在天天线 | 老司机免费视频 | 国产成人福利在线观看 | 日本精品久久久久久久 | 亚洲精品电影在线观看 | 欧美xxxⅹ性欧美大片 | 精品国产一区二区三区久久狼黑人 | 国产一级成人 | 欧美八区| 亚洲一区 | 国产yw851.c免费观看网站 | 欧美国产精品一区二区三区 | 国产精品18hdxxxⅹ在线 | 羞视频在线观看 | 亚洲男人天堂av | 99re视频这里只有精品 | 色橹橹欧美在线观看视频高清 | 午夜成人免费视频 | 国产精品第2页 |