Как поймать конкретное исключение с помощью шаблона повтора

Я пытаюсь позвонить в несколько служб, каждая служба зависит от предыдущего вызова. Для каждого вызова я создал свою собственную логику повтора, но я только недавно обнаружил шаблон повтора Spring и хотел бы его использовать.

Итак, я создал следующий retryTemplate:

  RetryTemplate retryTemplate = new RetryTemplate();
  FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
  fixedBackOffPolicy.setBackOffPeriod(4000L);
  SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
  retryPolicy.setMaxAttempts(5);
  retryTemplate.setRetryPolicy(retryPolicy);
  retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
  this.retryTemplate = retryTemplate;

И я использую retryTemplate для вызова службы как таковой:

try
      {
         retryTemplate.execute(
            (RetryCallback<Object, Throwable>) retryContext -> *Call serivce via restTemplate etc. Returns an object of XYZ*);
      } catch (Throwable throwable)
      {
         throwable.printStackTrace();
      }

Но вызов иногда вызывает исключение ResourceAccessException, когда мы постоянно бомбардируем службу большим количеством запросов (нормально ли это получать, когда служба находится в большой нагрузке?), Поэтому я хотел бы это поймать. Могу ли я сделать следующее:

try
  {
     retryTemplate.execute(
        (RetryCallback<Object, Throwable>) retryContext -> Optional.of(restClient.post(restTemplate, aauiUrlLeadUri, requestBody, LeadPersistResponse.class)));
  } catch (ResourceAccessException exception)
  {
     exception.printStackTrace();
     *perform logic to handle exception*
  } catch (Throwable throwable)
  {
     throwable.printStackTrace();
  }

или я могу просто изложить свою логику в обработке excpeiton в catch(Throwable throwable) блок?

0 ответов

Другие вопросы по тегам