99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于接口冪等性解決方案

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-30 16:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

接口冪等性是指無論調(diào)用接口的次數(shù)是一次還是多次,對于同一資源的操作都只會產(chǎn)生一次結(jié)果。換句話說,多次重復(fù)調(diào)用相同的接口請求應(yīng)該具有與單次請求相同的效果,不會導(dǎo)致不一致或副作用的發(fā)生。

今天我們使用AI幫我們?nèi)?chuàng)建一個自定義 注解 ,可以防止接口30秒內(nèi)的重復(fù)請求,并采用Redis作為緩存。

提問

話不多說,直接提問:

圖片

等待數(shù)分鐘后。。。

1.創(chuàng)建自定義注解 其中包括接口保護時長,開啟防止重復(fù)提交保護等。

圖片

2.然后創(chuàng)建攔截器

圖片

這里我們貼出攔截器的核心代碼:

@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (handler instanceof HandlerMethod) {
            HandlerMethod handlerMethod = (HandlerMethod) handler;
            RepeatSubmit annotation = handlerMethod.getMethodAnnotation(RepeatSubmit.class);
            if (annotation != null && annotation.enable()) {
                String key = buildKey(request);
                if (StringUtils.hasText(redisTemplate.opsForValue().get(key))) {
                    response.getWriter().write("repeat request, please try again later!");
                    return false;
                } else {
                    redisTemplate.opsForValue().set(key, Arrays.toString(request.getInputStream().readAllBytes()), annotation.timeout(), TimeUnit.SECONDS);
                }
            }
        }
        return true;
    }
 //創(chuàng)建redis 緩存key
    private String buildKey(HttpServletRequest request) throws IOException, NoSuchAlgorithmException {
        String key = useRequestMD5 ? hashRequest(request) : request.getRequestURI();
        return "repeat-submit:" + key;
    }

 //對請求做hash運算
    private String hashRequest(HttpServletRequest request) throws IOException, NoSuchAlgorithmException {
        byte[] hashBytes = MessageDigest.getInstance("MD5").digest(request.getInputStream().readAllBytes());
        StringBuilder sb = new StringBuilder();
        for (byte b : hashBytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }

3.注冊攔截器

圖片

最后給出的解釋與使用方法。

上面就是最關(guān)鍵的代碼了。

接入Redis

下面我們接入Redis。最精簡的配置版本

spring:
  data:
    redis:
      host: 127.0.0.1 
      port: 6379

接口使用注解

@RestController
public class RepeatTestController {

    @RepeatSubmit
    @GetMapping("/hello/mono1")
    public Mono< String > mono(){
        return Mono.just("Hello Mono -  Java North");
    }

    @RepeatSubmit
    @PostMapping ("/hello/mono1")
    public Mono< String > mono1(@RequestBody User user){
        return Mono.just("Hello Mono -  Java North-"+user.getName());
    }
}

本地起一個Redis,然后啟動本地的SpringBoot項目進行測試,

圖片

本地接口測試:30秒內(nèi)重復(fù)請求會需要直接被攔截

圖片

Redis中緩存的KEY如下:

圖片

以上就是利用AI為我們生成的一個簡單的接口短時間內(nèi)防止重復(fù)提交的注解代碼!

相關(guān)代碼在文章末尾,需要的話可以白嫖哈!

接口冪等性解決方案

下面問一下接口冪等性解決方案,

圖片

關(guān)于這個回答,大家覺得怎么樣?

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8997

    瀏覽量

    153696
  • 緩存
    +關(guān)注

    關(guān)注

    1

    文章

    246

    瀏覽量

    27165
  • AI
    AI
    +關(guān)注

    關(guān)注

    88

    文章

    35093

    瀏覽量

    279462
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70681
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    386

    瀏覽量

    11437
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    立體智慧倉儲解決方案.#云計算

    解決方案智能設(shè)備
    學(xué)習(xí)電子知識
    發(fā)布于 :2022年10月06日 19:45:47

    離線計算中的和DataWorks中的相關(guān)事項

    考慮到,導(dǎo)致對應(yīng)的單據(jù)有兩條確認記錄。點此查看原文:http://click.aliyun.com/m/42758/概念這個詞在軟
    發(fā)表于 02-27 13:24

    接口RFID解決方案提升醫(yī)療設(shè)備實用及使用壽命

    ,而這正是一個雙接口RFID解決方案所擅長的領(lǐng)域。作為連接系統(tǒng)內(nèi)部工作的網(wǎng)關(guān),雙接口RFID解決方案與監(jiān)控設(shè)備相連無需糾纏不清的連接線,因此可提高監(jiān)控儀的實用
    發(fā)表于 05-29 06:54

    I/O接口ESD靜電防護解決方案

    的危害,為便攜式消費電子、電腦、汽車電子產(chǎn)品的I/O接口提供理想的保護解決方案。接下來分享:I/O接口ESD靜電保護方案圖。I/O
    發(fā)表于 10-29 13:43

    HDMI接口靜電保護解決方案

    和發(fā)射器IC芯片采用的是亞微米CMOS工藝制造而成的,而亞微米CMOS十分地敏感,為此需要借助ESD靜電保護器件和ESD靜電保護解決方案為其保駕護航。機頂盒STB、電視LCD終端應(yīng)用極其容易受到ESD
    發(fā)表于 12-31 15:57

    有源DASCPRI接口解決方案

    在此前合作的基礎(chǔ)上,康普與諾基亞再次攜手開發(fā)了一款旨在降低基站收發(fā)器系統(tǒng)(BTS)與有源分布式天線系統(tǒng)(DAS)之間的接口復(fù)雜解決方案。
    發(fā)表于 08-20 16:19 ?849次閱讀

    在高并發(fā)下怎么保證接口?

    前言 接口性問題,對于開發(fā)人員來說,是一個跟語言無關(guān)的公共問題。本文分享了一些解決這類問題非常實用的辦法,絕大部分內(nèi)容我在項目中實踐過的,給有需要的小伙伴一個參考。 不知道你有沒有遇到過這些場景
    的頭像 發(fā)表于 05-14 10:23 ?2003次閱讀
    在高并發(fā)下怎么保證<b class='flag-5'>接口</b>的<b class='flag-5'>冪</b><b class='flag-5'>等</b><b class='flag-5'>性</b>?

    什么是?關(guān)于接口解決方案

    這里的樂觀鎖指的是用樂觀鎖的原理去實現(xiàn),為數(shù)據(jù)字段增加一個version字段,當數(shù)據(jù)需要更新時,先去數(shù)據(jù)庫里獲取此時的version版本號
    發(fā)表于 10-09 10:19 ?2259次閱讀

    分析解決)的方法

    這個概念,是一個數(shù)學(xué)上的概念,即:f……(f(f(x))) = f(x)。用在計算機領(lǐng)域,指的是系統(tǒng)里的接口或方法對外的一種承諾,使用相同參數(shù)對同一資源重復(fù)調(diào)用某個接口或方法的結(jié)果
    的頭像 發(fā)表于 10-14 10:08 ?1314次閱讀

    Spring Boot實現(xiàn)接口的4種方案

    是一個數(shù)學(xué)與計算機學(xué)概念,在數(shù)學(xué)中某一元運算為時,其作用在任一元素兩次后會和其作用一次的結(jié)果相同。
    的頭像 發(fā)表于 11-08 10:21 ?1208次閱讀

    什么是?的實現(xiàn)原理

    在編程中一個操作的特點是其任意多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同。函數(shù),或
    發(fā)表于 01-05 10:40 ?6959次閱讀

    一個注解,優(yōu)雅的實現(xiàn)接口!

    除了查詢和刪除之外,還有更新操作,同樣的更新操作在大多數(shù)場景下也是天然的,其例外是也會存在ABA的問題,更重要的是,比如執(zhí)行update table set a = a + 1 where v = 1這樣的更新就非等了。
    的頭像 發(fā)表于 08-26 14:36 ?1152次閱讀
    一個注解,優(yōu)雅的實現(xiàn)<b class='flag-5'>接口</b><b class='flag-5'>冪</b><b class='flag-5'>等</b><b class='flag-5'>性</b>!

    實用RTD接口解決方案

    電子發(fā)燒友網(wǎng)站提供《實用RTD接口解決方案.pdf》資料免費下載
    發(fā)表于 11-16 16:05 ?1次下載
    實用RTD<b class='flag-5'>接口</b><b class='flag-5'>解決方案</b>

    為什么要實現(xiàn)校驗 如何實現(xiàn)接口校驗

    前端重復(fù)提交表單:在填寫一些表格時候,用戶填寫完成提交,很多時候會因網(wǎng)絡(luò)波動沒有及時對用戶做出提交成功響應(yīng),致使用戶認為沒有成功提交,然后一直點提交按鈕,這時就會發(fā)生重復(fù)提交表單請求。
    的頭像 發(fā)表于 02-20 14:14 ?1647次閱讀

    探索LabVIEW編程接口原理與實踐

    原來是數(shù)學(xué)上的概念,在編程領(lǐng)域可以理解為:多次請求某一個資源或執(zhí)行某一個操作時應(yīng)該具有唯一同樣結(jié)果,也就是說,其任意多次執(zhí)行對資源
    的頭像 發(fā)表于 02-29 10:24 ?940次閱讀
    探索LabVIEW編程<b class='flag-5'>接口</b><b class='flag-5'>冪</b><b class='flag-5'>等</b><b class='flag-5'>性</b>原理與實踐