Я хочу вернуть контент пользователям по вызову на отдых, и я хочу отправить звонок на сервер отслеживания об этом запросе контента. Если сервер отслеживания перегружен слишком большим количеством ответов, мне все равно, не получится ли это. Я хочу, чтобы тайм-аут быстро и не задерживал основной запрос контента. Для этого я создал следующее:
@Configuration
@EnableAsync
public class AsyncConfiguration {
@Bean (name = "taskExecutor")
public Executor taskExecutor() {
log.info("Creating Async Task Executor");
final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setMaxPoolSize(2);//higher in prod
executor.setQueueCapacity(2);//higher in prod
executor.initialize();
executor.setThreadNamePrefix("AyncThread-");
return executor;
}
}
...
@Async
public void trackSearch(TrackingRequest request) {
try {
restTemplate.postForLocation(activityUri, request);
}
catch (Exception e) {
log.info("Exception in tracking activity: " + e.getMessage());
}
}
Итак, после получения основного контента я звоню trackSearch
выше. Мне все равно, если это не так, как я сказал. Но когда я тестирую этот код в JMeter, я не могу «превзойти» размер очереди. Я ожидал, что если слишком много пользователей попадут в одну и ту же конечную точку, очередь просто заполняется, и она перестает пытаться вызвать trackSearch и, следовательно, вызов restTemplate. Прямо сейчас ни один из вызовов не терпит неудачу.
Я, очевидно, что-то здесь неправильно понимаю, поэтому, если кто-нибудь сможет пролить свет на то, что я делаю неправильно, я был бы признателен.