java - 使用Java绝对每秒发送15条记录作为api请求

标签 java

我想知道如何向其他api发送多个请求并每隔一秒更新我们数据库的响应状态,让发送请求的TPS = 15。我使用了Timer和ScheduleExecutorService,如下所示。但两者都不支持周期性地每1秒发送15个请求。有时它效果很好,每秒 requests = 15 。有时只有 requests = 13 在 11:04:01 和 requests = 17 在 11:04:02。通过查看秒数,在 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);

这是附件日志文件的屏幕截图。 mismatch and merge records in next second log screenshot in each second

最佳答案

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();
  }
}

关于java - 使用Java绝对每秒发送15条记录作为api请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51038500/

相关文章:

Java Socket InputStream read() 总是在结束之前返回 -1

java - 如何监控Event Dispatch Thread队列?

java - Hazelcast 无法与 Spring 安全一起使用(未找到 SessionRegistry bean)

java - 如何从 SpringBoot 应用程序发出自定义指标并在 PCF Autoscaler 中使用它

java - 使用 Java 在 JIRA 中删除问题

java - 如何接收十六进制的套接字输入?

java - Java 中的客户端-服务器聊天应用程序

java - 防止在页面加载时将后缀添加到资源中

java - 何时使用 Java 中的 Writer 子类;常见做法

java - Spring MVC 可以反序列化 JSON(可以是对象或数组)吗?