在接口中出現的相同請求重復且連續發送的情況導致一些業務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("發送的重復請求被忽略"); }