Skip to content

分布式幂等(forge-starter-idempotent)

基于注解的分布式幂等框架,支持多种策略和 Redisson 分布式锁。

快速开始

1. 引入依赖

xml
<dependency>
    <groupId>com.mdframe.forge</groupId>
    <artifactId>forge-starter-idempotent</artifactId>
</dependency>

2. 使用 @Idempotent 注解

java
@PostMapping("/order")
@Idempotent(prefix = "order:create", expire = 600, message = "订单创建中,请勿重复提交")
public RespInfo<Order> createOrder(@RequestBody OrderCreateRequest request) {
    // ...
}

核心功能

幂等策略

策略说明适用场景
STRICT严格拒绝,重复请求直接抛出异常支付、下单等严格幂等场景
RETURN_CACHE(默认)重复请求返回缓存的上次执行结果查询后写、耗时的计算
TOKEN_REQUIRED必须先获取幂等 Token,携带 Token 才能执行前端表单提交

注解属性

属性类型默认值说明
prefixString"idempotent:"Redis Key 前缀
expireint600幂等 Key 过期时间(秒)
keyString""SpEL 表达式,用于自定义幂等 Key
messageString"请勿重复提交"重复提交时的提示信息
deleteKeyAfterSuccessbooleanfalse成功后是否删除幂等 Key
strategyIdempotentStrategyRETURN_CACHE幂等策略
cacheExpireint3600缓存结果过期时间(秒)
cacheResultbooleantrue是否缓存执行结果
enableMetricsbooleantrue是否启用 Prometheus 指标

TOKEN_REQUIRED 策略 — Token API

使用 TOKEN_REQUIRED 策略时,需要先获取幂等 Token:

POST /api/idempotent/token/generate
{
  "prefix": "order:create",
  "expire": 300
}

# 返回
{
  "token": "a1b2c3d4-..."
}

执行请求时在请求头中携带 Token:

POST /api/order
X-Idempotent-Token: a1b2c3d4-...
Content-Type: application/json

{...}

SpEL 表达式自定义 Key

java
@Idempotent(prefix = "user:update", key = "#userId", expire = 300)
public RespInfo updateUser(@PathVariable Long userId, @RequestBody UserUpdateRequest request) {
    // 幂等 Key = "user:update:" + userId
}

配置项

yaml
forge:
  idempotent:
    enabled: true
    prefix: "idempotent:"
    expire: 600
    message: "请勿重复提交"
    cache:
      enabled: true
      expire: 3600
      maxSize: 10000
    lock:
      enabled: true
      waitTime: 3000   # 分布式锁等待时间(ms)
      leaseTime: 5000  # 分布式锁持有时间(ms)
    token:
      enabled: true
      expire: 300      # Token 过期时间(秒)
      header: "X-Idempotent-Token"

核心组件

组件说明
IdempotentAspectAOP 切面,拦截 @Idempotent 注解的方法
IdempotentKeyGenerator幂等 Key 生成器,支持 SpEL 表达式
RedisTokenServiceRedis Token 服务,管理 Token 生命周期
RedisResultCacheService结果缓存服务,缓存执行结果
RedissonLockManagerRedisson 分布式锁管理器(带 Watchdog)
StrictStrategyHandlerSTRICT 策略处理器
ReturnCacheStrategyHandlerRETURN_CACHE 策略处理器
TokenRequiredStrategyHandlerTOKEN_REQUIRED 策略处理器

执行流程

请求进入 → 生成/解析幂等 Key → 选择策略
  → STRICT: 尝试获取锁 → 失败则抛异常
  → RETURN_CACHE: 查缓存 → 有则返回,无则执行并缓存
  → TOKEN_REQUIRED: 验证 Token → 通过后走 RETURN_CACHE 流程