spring boot / cloud (七) 使用@Retryable來進行重處理 前言 什麼時候需要重處理? 在實際工作中,重處理是一個非常常見的場景,比如:發送消息失敗,調用遠程服務失敗,爭搶鎖失敗,等等,這些錯誤可能是因為網路波動造成的,等待過後重處理就能成功.通常來說,會用try/catc ...
spring boot / cloud (七) 使用@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 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,等組件,都會涉及到重處理,會在後續的章節中講解
想獲得最快更新,請關註公眾號