Google,RateLimiter
  private RateLimiter limiter;
  @PostConstruct
  public void init() {
    limiter = RateLimiter.create(100.0);
  }使用
// 是否触发了QPS保护
if (!limiter.tryAcquire()) {
    return Response.failure(ErrorCodeMsgEnums.OPERATION_FREQUENTLY);
}QPS、QTS区别:
QPS:每秒查询数;【查询】
QTS:每秒事物数(处理事物数量);【更新】
拓展,如果要在RateLimiter中动态设置QPS值,比如使用Nacos配置文件形式;
@Slf4j
@Getter
@RequiredArgsConstructor
@Service
public class ShiseidoRateLimiterService {
  private final ShiseidoConfig shiseidoConfig;
  private RateLimiter rateLimiter;
  @PostConstruct
  public void init() {
    rateLimiter = RateLimiter.create(shiseidoConfig.getTodosUnfinishedQps());
  }
  @EventListener
  public void handleContextRefresh(EnvironmentChangeEvent event) {
    log.info("开始刷新待办QPS值: {}", shiseidoConfig.getTodosUnfinishedQps());
    rateLimiter.setRate(shiseidoConfig.getTodosUnfinishedQps());
  }
}
@PostConstruct:构造函数被调用,并且所有的Spring注入都以完成时,该注解方法才会执行;
@EventListener:应用内发布与监听器匹配的异步或同步事件时,该方法会被触发;
EnvironmentChangeEvent:应用程序的环境或者属性变化时,事件会被触发【如果你只关心环境的刷新,而不关心具体哪些属性变化,你可能想要监听 RefreshEvent 而不是 EnvironmentChangeEvent。】
使用:
if (!shiseidoRateLimiterService.getRateLimiter().tryAcquire()) {
   return Response.failure(ErrorCodeMsgEnums.OPERATION_FREQUENTLY);
}