spring boot / cloud (七) 使用@Retryable來進行重處理

spring boot / cloud (七) 使用@Retryable來進行重處理

前言

何時須要重處理?

在實際工做中,重處理是一個很是常見的場景,好比:發送消息失敗,調用遠程服務失敗,爭搶鎖失敗,等等,這些錯誤多是由於網絡波動形成的,等待事後重處理就能成功.一般來講,會用try/catch,while循環之類的語法來進行重處理,可是這樣的作法缺少統一性,而且不是很方便,要多寫不少代碼.然而spring-retry卻能夠經過註解,在不入侵原有業務邏輯代碼的方式下,優雅的實現重處理功能.java

思路

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

實現

1.pom引用

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

2.應用啓動類開啓retry

....其餘註解
@EnableRetry
public class BaseApplication {
    .......
}

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

@Retryable(value={A異常.class,B異常.class},
             maxAttempts=重試次數,
             backoff = @Backoff(value = 每次重試延遲毫秒數))
  public Integer 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
  }

代碼倉庫 (博客配套代碼)

結束

演示了單spring boot的應用的,在後續的cloud場景中,如:zuul,等組件,都會涉及到重處理,會在後續的章節中講解框架


想得到最快更新,請關注公衆號dom

想得到最快更新,請關注公衆號

相關文章
相關標籤/搜索