java—如何使用重试模板捕获特定异常

qrjkbowd  于 2021-07-04  发布在  Java
关注(0)|答案(0)|浏览(294)

我正在尝试呼叫多个服务,每个服务都依赖于前一个呼叫。每次调用我都创建了自己的重试逻辑,但我最近才发现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();
  }

或者我可以简单地用我的逻辑来处理 catch(Throwable throwable) 阻止?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题