每1秒从Spring Scheduler发送50个请求

时间:2018-09-04 11:16:04

标签: java spring scheduled-tasks scheduler threadpoolexecutor

我的调度程序具有方法:

@Scheduled(fixedDelay = 1000L)
public void sendRequest() {           
 client.getData();   //send request to some server
}

我每秒需要发送50个请求(致电client.getData())  我该怎么做?

这个例子很糟糕,但是我写它来显示我的需求:

@Scheduled(fixedDelay = 1000L)
public void sendRequest() {  
 for(int i=0; i<50; i++){         
 taskExecutor.execute(() -> client.getData());   //send request to some server
 }
}

还是maby,我需要创建50个schedulers,每个调度程序都会每秒触发一次?

1 个答案:

答案 0 :(得分:0)

@Scheduled(fixedDelay = 1000L)

@Scheduled批注的处理是通过注册ScheduledAnnotationBeanPostProcessor来执行的。 Bean后处理器根据通过注释提供的“ fixedRate”,“ fixedDelay”或“ cron”表达式,注册使用{Schedled注释的方法,这些方法将由TaskScheduler调用。 在这里,我们有一个并发的故事。如果将ThreadPoolTaskScheduler用作TaskScheduler的实现,从字面上看,您将实现Spring的TaskScheduler接口的实现,并包装了一个本地ScheduledThreadPoolExecutor。我们逐步走到Thread s。它们确实需要CPU时间。 CPU时间与您的计算机及其配置有关。

您可以根据需要使用此注释,但实际性能取决于部署应用程序的计算机。如果机器的配置(CPU等)提供了每秒精确地处理/发送50个请求的能力-不用客气。如果您尝试在不同的计算机上以独立应用程序的形式启动50个调度程序,则也可能会解决您的问题。