在接口中出现的相同请求重复且连续发送的情况导致一些业务BUG,需要在接口上实现防抖

使用google的cacheBuilder

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;

定义一个静态缓存对象,key值根据我们业务请求报文定义

//初始化缓存 orgkey,设置5秒过期
    public static final Cache<String, Boolean> cahceBuilder = 
                CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.SECONDS).build();
//获取请求报文的唯一键,或者使用报文中的某些能请求重复的属性拼装
final String key=JSON.toJSONString(request)
//封装对象,用于判断是否命中缓存
        final AtomicBoolean flag=new AtomicBoolean(false);
//从缓存中获取该键,如果没有找到,则执行业务方法
        cahceBuilder.get(key, new Callable<Boolean>() {
            @Override
            public Boolean call() throws Exception {
                flag.set(true);
                //未命中,则执行业务方法
                return true;
            }
        });
        if(flag.get()){
            logger.warn("发送的重复请求被忽略");
        }

 

posted on 2017-06-16 11:28  菜鸟你够了  阅读(1820)  评论(0编辑  收藏  举报