首页 > 解决方案 > 使用 Java 绝对每秒发送 15 条记录作为 api 请求

问题描述

我想知道如何向其他 api 发送多个请求并每隔一秒将响应状态更新到我们的数据库,让发送请求为 TPS = 15。我同时使用了 Timer 和 ScheduleExecutorService,如下所示。但两者都不支持每 1 秒定期发送 15 个请求。有时它运作良好 requests = 15 in every second 。有时在 11:04:01 中只有请求 = 13,在 11:04:02 中只有请求 = 17。通过查看秒数,在 11:04:01 我要发送的是 15 条记录,实际上它发送了 13 条记录,差异是 2 条记录。所以,另一个 11:04:02 ,剩下的 2 条记录达到了这一秒,总记录变为 15+2 = 17 条记录。所以,请帮我解决这个问题,我应该使用哪个技术或库,而不是同时使用 Timer 和 ScheduledExecutorService。

Timer timer = new Timer();
timer.schedule(new sendRequest(), 0, 1000);

/////////////////////////////////////

ScheduledExecutorService executor =
Executors.newSingleThreadScheduledExecutor();

Runnable periodicTask = new Runnable() {
public void run() {
    // Invoke method(s) to do the work
    doPeriodicWork();
}
};

executor.scheduleAtFixedRate(periodicTask, 0, 1, TimeUnit.SECONDS);

这是附件日志文件截图。 每秒日志截图中的不匹配和合并记录

标签: java

解决方案


public class SendTPS extends TimerTask {

  public static void main(String[] args){

    int maxTPS = 15;

    Timer timer = new Timer();
    int maxSleepInterval = Math.round((1000 / maxTPS));

    timer.schedule(new SendTPS(), 0, maxSleepInterval);
  }

  public static  void fetchData(){
    System.out.println(new SimpleDateFormat("HH:mm:ss").format(new 
    java.util.Date())+"fetch data....");
  }

  public void run() {
    fetchData();
  }
}

推荐阅读