отправлять 50 запросов из весеннего планировщика каждую 1 секунду - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть планировщик с методом:

@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
 }
}

Или, может, мне нужно создать 50 schedulers, и каждый планировщик будет срабатывать каждую секунду?

1 Ответ

0 голосов
/ 31 мая 2019
@Scheduled(fixedDelay = 1000L)

Обработка @Scheduled аннотаций выполняется путем регистрации ScheduledAnnotationBeanPostProcessor . Постпроцессор бина, который регистрирует методы, аннотированные @Scheduled, чтобы вызываться с помощью TaskScheduler в соответствии с выражениями "fixedRate", "fixedDelay" или "cron", предоставленными посредством аннотации. И здесь у нас есть история параллелизма. Если вы используете ThreadPoolTaskScheduler в качестве реализации TaskScheduler, буквально у вас есть реализация SpringScheduler интерфейса Spring, заключающая в себе собственный ScheduledThreadPoolExecutor . Шаг за шагом мы подходим к Thread s. Они требуют процессорного времени. Время процессора зависит от вашей машины и его конфигурации.

Вы можете использовать эту аннотацию для своих целей, но реальная производительность зависит от вашего компьютера, на котором развернуто приложение. Если конфигурация машины (ЦП и т. Д.) Позволяет обрабатывать / отправлять 50 запросов ровно каждую секунду - милости просим. Если вы попытаетесь запустить 50 планировщиков как отдельные приложения на разных компьютерах, это также может решить вашу проблему.

...