Проблема тайм-аута дБ при параллельном подключении пользователей после вызова API - PullRequest
1 голос
/ 29 марта 2019

Дело в том, что

У меня есть ServiceA, который отвечает AResponse после 5000 мс на запрос.

У меня также есть ServiceB, который вызывает ServiceA (что делает вызов API как). И согласно AResponse вставляет данные в дБ (в настоящее время hsql).

У меня ограничение на пул соединений в 2 дБ. И время ожидания соединения 30000ms по умолчанию. Я не хочу менять эти значения.

Итак, при попытке 100 пользователей одновременно вызывать serviceB.getAndSave() метод. Это дает тайм-аут после 30 секунд для пользователей.

// ServiceA method of getting response
public AResponse getData(param){
  try {
          Thread.sleep(5000);
          return new AResponse("SUCCESS");
      } catch (InterruptedException e) {
          e.printStackTrace();
          return null;
      }
}
// ServiceB class has annotation @Transactional
// In ServiceB inserts data to db depends on serviceA's AResponse.
public getAndSave(){
    AResponse aresponse = serviceA.getData(param);
    MyData myData = new MyData(aresponse)
    myRepository.save(myData);
}

Так, как я могу справиться с этой ситуацией без грязных данных и обработать эту ловушку тайм-аута. Кстати, все мои данные должны быть сохранены правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...