Alice52 / java-ocean

java-tutorial .We intend to explain Java knowledge in this repository.
MIT License
0 stars 0 forks source link

[mvc] request idempotent #201

Closed Alice52 closed 3 years ago

Alice52 commented 3 years ago

请求的幂等处理

  1. 接口幂等性 | mq 消费幂等

    • Feign 的 retry 机制: 接口超时重试
    • 增量更新操作
    • 创建操作
    • 重复提交[连续点了 2 次/web 端回退导致的]
    • 有一些操作用户退出了, 又重新点击进来: 放大了时间差[由于网络差]
  2. 操作本身具有幂等性

    • 带主键的插入
    • 查询
    • 定量更新
    • 删除操作: ABA 问题
  3. 条件

    • 如果两个请求的参数不同, 则一定是不同的请求
    • 如果参数请求相同, 且在指定时间内调用了多次则会触发幂等检查
  4. 单机版的幂等检查

    • expireMap + md5
    • <uri, <md5, count>> count is stored in ConcurrentHashMap
    • save 操作逻辑上的检查
  5. 集群的幂等检查

    • setnxex + md5
    • key-md5, value-uri=token
    • save 操作逻辑上的检查
    • 如果请求失败, 则该次不算 + md5时获取参数会涉及到只能读取一次 requestbody的问题
  6. common sulution

    • 分布式系统中 retry 的问题可以通过 req-id 入库解决: duplicate

reference

  1. link