Могу ли я получить несколько ответов от микро-службы, которая будет запрашивать MongoDB - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть Служба, которая ответит нам, запросив 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 Ответ

0 голосов
/ 23 апреля 2019

По умолчанию приложения Spring Boot являются многопоточными, поэтому ваш пример кода

ExecutorService es = Executors.newFixedThreadPool(50);

for (RouterInfo router : listOfcpeRouterInfo){ Future serviceIDS = es.submit(new CalculationTaskA(router.getCustomerRef(), rieClient)); }

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

...