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

當(dāng)前位置:首頁(yè) > 科技  > 軟件

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

來(lái)源: 責(zé)編: 時(shí)間:2023-08-05 11:46:08 4408觀看
導(dǎo)讀場(chǎng)景碼猿慢病云管理系統(tǒng)中其實(shí)高并發(fā)的場(chǎng)景不是很多,沒有必要每個(gè)接口都去考慮并發(fā)高的場(chǎng)景,比如添加住院患者的這個(gè)接口,具體的業(yè)務(wù)代碼就不貼了,業(yè)務(wù)偽代碼如下:圖片上述代碼有問(wèn)題嗎?誰(shuí)能說(shuō)有問(wèn)題?一般情況下是沒什么問(wèn)題

場(chǎng)景

碼猿慢病云管理系統(tǒng)中其實(shí)高并發(fā)的場(chǎng)景不是很多,沒有必要每個(gè)接口都去考慮并發(fā)高的場(chǎng)景,比如添加住院患者的這個(gè)接口,具體的業(yè)務(wù)代碼就不貼了,業(yè)務(wù)偽代碼如下:qD528資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qD528資訊網(wǎng)——每日最新資訊28at.com

上述代碼有問(wèn)題嗎?誰(shuí)能說(shuō)有問(wèn)題?一般情況下是沒什么問(wèn)題,但是在高并發(fā)的場(chǎng)景下肯定是存在問(wèn)題,為什么?qD528資訊網(wǎng)——每日最新資訊28at.com

因?yàn)橛惺聞?wù)的隔離性,step1這個(gè)階段對(duì)住院號(hào)的校驗(yàn)肯定是存在問(wèn)題的,在高并發(fā)的場(chǎng)景下無(wú)法保證這里的校驗(yàn)一定準(zhǔn)確。qD528資訊網(wǎng)——每日最新資訊28at.com

其實(shí)這個(gè)接口的并發(fā)并不高,在碼猿慢病云管理系統(tǒng)中一般不會(huì)出現(xiàn)這種問(wèn)題,那么什么時(shí)候會(huì)出現(xiàn)呢?qD528資訊網(wǎng)——每日最新資訊28at.com

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

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

解決方案

在碼猿慢病云管理系統(tǒng)中新增了一個(gè)注解:@RepeatSubmit,代碼如下:qD528資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qD528資訊網(wǎng)——每日最新資訊28at.com

只需要將該注解標(biāo)注在新增、修改、刪除接口上就能保證在默認(rèn)的5秒之內(nèi)接口冪等。qD528資訊網(wǎng)——每日最新資訊28at.com

比如新增住院患者這個(gè)接口:qD528資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qD528資訊網(wǎng)——每日最新資訊28at.com

那么原理是什么?其實(shí)很簡(jiǎn)單,先來(lái)說(shuō)下原理,再介紹具體的實(shí)現(xiàn):qD528資訊網(wǎng)——每日最新資訊28at.com

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

上述6個(gè)步驟中其實(shí)只有一點(diǎn)比較難實(shí)現(xiàn)的,其他的都是基本操作,就是獲取這個(gè)請(qǐng)求參數(shù),下面將詳細(xì)介紹一下如何獲取這個(gè)請(qǐng)求參數(shù)。qD528資訊網(wǎng)——每日最新資訊28at.com

獲取請(qǐng)求參數(shù)

對(duì)于form-data的入?yún)⒅恍枰{(diào)用HttpServletRequest的API讀取,但是對(duì)于@RequestBody標(biāo)注的入?yún)⑹峭ㄟ^(guò)IO流讀取數(shù)據(jù),且IO流只能被讀取一次,如果在AOP中讀取了,那么在接口層面的入?yún)⒆x取肯定是有問(wèn)題,報(bào)錯(cuò)如下:qD528資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qD528資訊網(wǎng)——每日最新資訊28at.com

解決方案也很簡(jiǎn)單,只需要保證IO流能夠多次讀取即可,下面就來(lái)介紹一下方案。qD528資訊網(wǎng)——每日最新資訊28at.com

這里我們可以利用裝飾者模式對(duì) HttpServletRequest 的功能進(jìn)行增強(qiáng),具體做法也很簡(jiǎn)單,我們重新定義一個(gè) HttpServletRequest:qD528資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qD528資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qD528資訊網(wǎng)——每日最新資訊28at.com

這段代碼并不難,很好懂。qD528資訊網(wǎng)——每日最新資訊28at.com

首先在構(gòu)造 RepeatedlyRequestWrapper 的時(shí)候,就通過(guò) IO 流將數(shù)據(jù)讀取出來(lái)并存入到一個(gè) byte 數(shù)組中,然后重寫 getReader 和 getInputStream 方法,在這兩個(gè)讀取 IO 流的方法中,都從 byte 數(shù)組中返回 IO 流數(shù)據(jù)出來(lái),這樣就實(shí)現(xiàn)了反復(fù)讀取了。qD528資訊網(wǎng)——每日最新資訊28at.com

接下來(lái)我們定義一個(gè)過(guò)濾器,讓這個(gè)裝飾后的 Request 生效:qD528資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qD528資訊網(wǎng)——每日最新資訊28at.com

判斷一下,如果請(qǐng)求數(shù)據(jù)類型是 JSON 的話,就把 HttpServletRequest “偷梁換柱”改為 HttpRequestWrapper,然后讓過(guò)濾器繼續(xù)往下走。qD528資訊網(wǎng)——每日最新資訊28at.com

這樣就可以配置后就可以在程序中反復(fù)讀取參數(shù)了!qD528資訊網(wǎng)——每日最新資訊28at.com

防重注解實(shí)現(xiàn)

解決了參數(shù)讀取的問(wèn)題,下面就可以輕松實(shí)現(xiàn)這個(gè)防重注解了,首先定義注解com.code.ape.codeape.common.security.annotation.RepeatSubmit:qD528資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qD528資訊網(wǎng)——每日最新資訊28at.com

接下來(lái)直接用AOP實(shí)現(xiàn),com.code.ape.codeape.common.security.component.CodeapeRepeatSubmitAspect代碼如下:qD528資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qD528資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qD528資訊網(wǎng)——每日最新資訊28at.com

邏輯很簡(jiǎn)單,上述已經(jīng)介紹過(guò)完整的流程,這里需要注意的是參數(shù)的讀取,代碼如下:qD528資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qD528資訊網(wǎng)——每日最新資訊28at.com

其實(shí)就是將request判斷下是否是經(jīng)過(guò)過(guò)濾器封裝后的HttpRequestWrapper對(duì)象,如果是的話則是@RequestBody入?yún)ⅲ苯訌腎O流中讀取。qD528資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

本節(jié)內(nèi)容介紹了防重注解@RepeatSubmit的實(shí)現(xiàn)原理,后續(xù)開發(fā)中只需要在非查詢接口中添加這個(gè)注解就能保證在一定時(shí)間內(nèi)防止重復(fù)提交。qD528資訊網(wǎng)——每日最新資訊28at.com

碼猿慢病云管理系統(tǒng)已經(jīng)在星球中陸續(xù)更新,目前更新內(nèi)容如下:qD528資訊網(wǎng)——每日最新資訊28at.com

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

qD528資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-146-0.html一個(gè)注解實(shí)現(xiàn)接口冪等,這樣才優(yōu)雅!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 從零到英雄:高并發(fā)與性能優(yōu)化的神奇之旅

下一篇: WebRTC.Net庫(kù)開發(fā)進(jìn)階,教你實(shí)現(xiàn)屏幕共享和多路復(fù)用!

標(biāo)簽:
  • 熱門焦點(diǎn)
  • K60至尊版狂暴引擎2.0加持:超177萬(wàn)跑分?jǐn)孬@性能第一

    Redmi的后性能時(shí)代戰(zhàn)略發(fā)布會(huì)今天下午如期舉辦,在本次發(fā)布會(huì)上,Redmi公布了多項(xiàng)關(guān)于和聯(lián)發(fā)科的深度合作,以及新機(jī)K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學(xué)習(xí)反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無(wú)法成功對(duì)代碼進(jìn)行反混淆,尤其是使用自定義混淆器對(duì)其進(jìn)行混淆時(shí)。什么是混
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對(duì)帶有指定屬性的 HTML 元素設(shè)置樣式。可以為擁有指定屬性的 HTML 元素設(shè)置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡(jiǎn)單而
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會(huì)涉及各種各樣的安全任務(wù),包括但不限于:開發(fā)某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 一條抖音4億人圍觀 ! 這家MCN比無(wú)憂傳媒還野

    作者:Hiu 來(lái)源:互聯(lián)網(wǎng)品牌官01 擦邊少女空降熱搜,幕后推手曝光被網(wǎng)友譽(yù)為“純欲天花板”的女網(wǎng)紅井川里予,近期因?yàn)橐唤M哥特風(fēng)照片登上熱搜,引發(fā)了一場(chǎng)互聯(lián)網(wǎng)世界關(guān)于
  • 疑似小米14外觀設(shè)計(jì)圖曝光:后置相機(jī)模組變化不大

    下半年的大幕已經(jīng)開啟,而誰(shuí)將成為下半年手機(jī)圈的主角就成為了大家關(guān)注的焦點(diǎn),其中被傳有望拿下新一代驍龍8 Gen3旗艦芯片的小米14系列更是備受大家矚
  • 華為Mate 60系列用上可變靈動(dòng)島:正式版體驗(yàn)將會(huì)更出色

    這段時(shí)間以來(lái),關(guān)于華為新旗艦的爆料日漸密集。據(jù)此前多方爆料,今年華為將開始恢復(fù)一年雙旗艦戰(zhàn)略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • 2299元起!iQOO Pad明晚首銷:性能最強(qiáng)天璣平板

    5月23日,iQOO如期舉行了新品發(fā)布會(huì),除了首發(fā)安卓最強(qiáng)旗艦處理器的iQOO Neo8系列新機(jī)外,還在發(fā)布會(huì)上推出了旗下首款平板電腦——iQOO Pad,其最大的賣點(diǎn)
  • 朋友圈可以修改可見范圍了 蘋果用戶可率先體驗(yàn)

    近日,iOS用戶迎來(lái)微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項(xiàng)實(shí)用功能。在新版微信中,朋友圈終于可以修改可見范圍,簡(jiǎn)單來(lái)說(shuō)就是已發(fā)布的朋友圈
Top