1. 程式人生 > >使用@Retryable來進行重處理

使用@Retryable來進行重處理

###什麼時候需要重處理?

在實際工作中,重處理是一個非常常見的場景,比如:傳送訊息失敗,呼叫遠端服務失敗,爭搶鎖失敗,等等,這些錯誤可能是因為網路波動造成的,等待過後重處理就能成功.通常來說,會用try/catch,while迴圈之類的語法來進行重處理,但是這樣的做法缺乏統一性,並且不是很方便,要多寫很多程式碼.然而spring-retry卻可以通過註解,在不入侵原有業務邏輯程式碼的方式下,優雅的實現重處理功能.

##思路

使用@Retryable和@Recover實現重處理,以及重處理失後的回撥

##實現

###1.pom引用

<dependency>
  <groupId
>
org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency>

###2.應用啟動類開啟retry

....其他註解
@EnableRetry
public classBaseApplication{
    .......
}

###3.在指定方法上標記@Retryable來開啟重試

  @Retryable(value={A異常.class,B異常.class},
             maxAttempts=重試次數,
             backoff = @Backoff
(value = 每次重試延遲毫秒數)) public Integer retry() { LOGGER.info("測試retry"); final int a = 5; int num = new SecureRandom().nextInt(); if (num % a == 0) { return num; } throw new RetryException("重試失敗"); }

###4.在指定方法上標記@Recover來開啟重試失敗後呼叫的方法(注意,需跟重處理方法在同一個類中)

  @Recover
  public
void recover(A異常 e)
{ // ... do something } @Recover public void recover(B異常 e) { // ... do something }