#java #spring #tomcat #executor
#java #весна #tomcat #исполнитель
Вопрос:
У меня есть сервис, который вернет нам ответ, запросив MongoDB на основе некоторого предоставленного параметра
@RequestMapping(value = "/custRef/{custRef}", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<String> getServiceId(@PathVariable("custRef") String custRef) throws InterruptedException {
System.out.println("Thread.currentThread().getName() :" Thread.currentThread().getName());
String serviceId=//calling Mongo Service and getting the result
if(custRef == null) {
return new ResponseEntity<String>("No service id available for the given FO Id:" custRef,HttpStatus.NOT_FOUND);
}
return new ResponseEntity<String>(serviceId,HttpStatus.OK);
}
У меня есть другой клиент, который вызовет вышеупомянутую службу, предоставив соответствующий параметр. Я хочу вызвать вышеупомянутую службу, используя 10 потоков. могу ли я получить ответ с той же частотой от вышеупомянутой службы или мне нужно выполнить какую-либо конфигурацию на сервере, на котором работает вышеупомянутый
ExecutorService es = Executors.newFixedThreadPool(50);
for (RouterInfo router : listOfcpeRouterInfo){
Future<String> serviceIDS = es.submit(new CalculationTaskA(router.getCustomerRef(), rieClient));
}
@Override
public String call() throws Exception {
String currentThreadName = Thread.currentThread().getName();
log.info("##### [" currentThreadName "] <" taskId "> STARTIING #####");
// System.out.println("[" currentThreadName "] <" taskId ">
// Sleeping for " sleepTime " millis");
// TimeUnit.MILLISECONDS.sleep(sleepTime);
//
String serviceId = null;
try {
///
serviceId = rieClient.getObject(customerRef);
log.info("serviceId for given foid: " customerRef " is " serviceId);
} catch (ParseException pe) {
log.error("error while parsing Data", pe);
}
log.info("****** [" currentThreadName "] <" taskId "> DONE ******");
return serviceId;
}
calling above service
enter code here
Inside getObject I am doing below
ResponseEntity<String> response=restTemplate.exchange(this.serviceIdUrl "/{foId}",HttpMethod.GET,entity,String.class,foId);
Ответ №1:
По умолчанию приложения Spring Boot являются многопоточными, поэтому ваш пример кода
ExecutorService es = Executors.newFixedThreadPool(50);
for (RouterInfo router : listOfcpeRouterInfo){ Future serviceIDS = es.submit(new CalculationTaskA(router.getCustomerRef(), rieClient)); }
потребуется только в вашей службе «Монго», если асинхронные вызовы должны выполняться службой «Монго».