首页 > 其他分享 >SpringBoot自定义注解实现接口幂等

SpringBoot自定义注解实现接口幂等

时间:2024-07-01 11:31:54浏览次数:21  
标签:lang java SpringBoot 自定义 boot 注解 import annotation 请求

一、前言
接口幂等就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的。对数据库的查询和删除是天然幂等的,更新操作在大多数场景下也是天然幂等。插入大多数情况下都是非幂等的,除非利用数据库的唯一索引来保证数据不会重复保存。

二、为什么需要幂等
1.超时重试

当发起一次RPC请求时,难免会因为网络不稳定而导致请求失败,一般遇到这样的问题我们希望能够重新请求一次,正常情况下没有问题,但有时请求实际上已经发出去了,只是在请求响应时网络异常或者超时,此时,请求方如果再重新发起一次请求,那被请求方就需要保证幂等了。

2.异步回调

异步回调是提升系统接口吞吐量的一种常用方式,很明显此类接口一定是需要保证幂等性的。

3.消息队列

现在常用的消息队列框架,比如:Kafka、RocketMQ、RabbitMQ在消息传递时都会采取At least once原则(也就是至少一次原则,在消息传递时,不允许丢消息,但是允许有重复的消息),既然消息队列不保证不会出现重复的消息,那消费者自然要保证处理逻辑的幂等性了。

三、实现幂等的关键因素
关键因素1

幂等唯一标识可以叫它幂等号或者幂等令牌或者全局ID,总之就是客户端和服务端一次请求的唯一标识,一般情况下由客户端来生成,也可以让第三方来统一分配。

关键因素2

有了唯一标识以后,服务端只需要确保这个唯一标识只被使用一次即可,一种常见的方式就是利用数据库的唯一索引。

四、代码实现
1.添加依赖

<!--redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
 <!--aop-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

2.自定义注解

package com.example.aopdemo.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义幂等注解
 */
@Target(value = ElementType.METHOD)
@Retention(RetentionPolic

标签:lang,java,SpringBoot,自定义,boot,注解,import,annotation,请求
From: https://blog.csdn.net/wjianwei666/article/details/140093073

相关文章

  • Swagger php注解常用语法梳理
    Swaggerphp注解常用语法梳理快速编写你的RESTFULAPI接口文档工具,通过注释定义接口和模型,可以和代码文件放置一起,也可以单独文件存放。Swagger优势通过代码注解定义文档,更容易保持代码文档的一致性模型复用,减少文档冗余,带来更可靠的文档提供客户端访问接口,可以直接......
  • 创建springboot项目的具体步骤
    点击newProject点击SpringInitializer创建springboot项目将ServerURL改为start.aliyun.com这样就可以选择java11的版本Location选择文件存放路径Language选择编程语言Type选择项目管理的类型JDK选择项目的JDKJava选择项目的java版本Packaging选择项目的打包......
  • 全网最适合入门的面向对象编程教程:06 类和对象的Python实现-自定义类的数据封装
    全网最适合入门的面向对象编程教程:06类和对象的Python实现-自定义类的数据封装摘要:本文我们主要介绍了数据封装的基本概念和特性,如何设置自定义类的私有属性和私有方法,protect属性的概念和特点。往期推荐:学嵌入式的你,还不会面向对象??!全网最适合入门的面向对象编程教程:00......
  • (免费领源码)java#Springboot#mysql物品代拿系统32500-计算机毕业设计项目选题推荐
    摘 要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术开发,Sp......
  • 53、Flink 测试工具测试用户自定义函数详解
    1.测试用户自定义函数a)单元测试无状态、无时间限制的UDF示例:无状态的MapFunction。publicclassIncrementMapFunctionimplementsMapFunction<Long,Long>{@OverridepublicLongmap(Longrecord)throwsException{returnrecord+1;}......
  • Cesium 实战 - 自定义纹理材质系列之 - 涟漪效果
    Cesium实战-自定义纹理材质系列之-涟漪效果核心代码完整代码在线示例Cesium给实体对象(Entity)提供了很多实用的样式,基本满足普通项目需求;但是作为WebGL引擎,肯定不够丰富,尤其是动态效果样式。对于实体对象(Entity),可以通过自定义材质,实现各种动态效果,虽......
  • 基于springboot足球社区管理系统万字文档PPT源码分享
    前言......
  • 基于springboot助农管理系统万字文档PPT源码分享
    前言......
  • 【Redis —— 03 SpringBoot整合Redis】
    SpringBoot整合Redis是一种常见的做法,用于提升应用的性能和可扩展性。通过将Redis作为缓存或数据存储,应用可以实现快速的数据读写和高效的资源管理。以下是一个基本的整合步骤:1.引入依赖首先,在你的pom.xml文件中添加Redis和SpringDataRedis的依赖:<!--Sprin......
  • springboot学习-2
    springboot配置配置文件格式-res中appli.properties中设置-同目录下application.yml主要serve:port:80(注意空格)无提示则fileproj-struc选择项目点击绿色叶子追加配置文件-application.yaml优先级properties>yml>ymal同上一个yaml-大小写-只能空格不能tab-属性前......