Могу ли я получить множественный ответ от микросервиса, который будет запрашивать MongoDB

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

потребуется только в вашей службе «Монго», если асинхронные вызовы должны выполняться службой «Монго».