Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java防止接口重复请求

作者:金钱打造势力狗。   发布日期:2026-05-03   浏览:67

import java.util.concurrent.ConcurrentHashMap;

public class RequestLimiter {

    // 使用ConcurrentHashMap来存储请求的唯一标识符,保证线程安全
    private static final ConcurrentHashMap<String, Boolean> requestMap = new ConcurrentHashMap<>();

    /**
     * 防止接口重复请求的方法
     * @param requestId 请求的唯一标识符
     * @return 如果是重复请求返回false,否则返回true
     */
    public boolean preventDuplicateRequests(String requestId) {
        // 尝试将requestId放入map中,如果已经存在则返回false
        return requestMap.putIfAbsent(requestId, Boolean.TRUE) == null;
    }

    /**
     * 移除请求标识符,以便后续可以再次请求
     * @param requestId 请求的唯一标识符
     */
    public void removeRequestId(String requestId) {
        requestMap.remove(requestId);
    }

    public static void main(String[] args) {
        RequestLimiter limiter = new RequestLimiter();
        String requestId = "uniqueRequestId";

        // 第一次请求
        if (limiter.preventDuplicateRequests(requestId)) {
            System.out.println("处理请求");
        } else {
            System.out.println("重复请求,不予处理");
        }

        // 模拟第二次重复请求
        if (limiter.preventDuplicateRequests(requestId)) {
            System.out.println("处理请求");
        } else {
            System.out.println("重复请求,不予处理");
        }

        // 移除请求标识符后可以再次请求
        limiter.removeRequestId(requestId);

        if (limiter.preventDuplicateRequests(requestId)) {
            System.out.println("处理请求");
        } else {
            System.out.println("重复请求,不予处理");
        }
    }
}

解释说明:

  1. ConcurrentHashMap:使用ConcurrentHashMap来存储请求的唯一标识符(requestId),以确保线程安全。每个requestId对应一个布尔值Boolean.TRUE,表示该请求已经被处理过。
  2. preventDuplicateRequests方法:该方法用于防止重复请求。它尝试将requestId放入requestMap中,如果requestId已经存在,则返回false,表示这是一个重复请求;否则返回true,表示这是一个新的请求。
  3. removeRequestId方法:该方法用于移除已经处理过的requestId,使得相同的requestId可以在未来的某个时间点再次被接受。
  4. main方法:模拟了两次请求,第一次是新请求,第二次是重复请求,展示了如何使用上述方法来防止重复请求。

希望这段代码和解释对你有帮助!

上一篇:java 时间戳转换成年月日时分秒

下一篇:java枚举类型

大家都在看

java url decode

java判断是windows还是linux

java连接数据库的代码

java date类型比较大小

java djl

ubuntu 卸载java

es java api

java list 查找

java 解压rar

jsonobject.tojavaobje

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站