SpringBoot接口或方法進(jìn)行失敗重試的實(shí)現(xiàn)方式
1. 前言
為了防止網(wǎng)絡(luò)抖動(dòng),影響我們核心接口或方法的成功率,通常我們會(huì)對(duì)核心方法進(jìn)行失敗重試,如果我們自己通過(guò)for循環(huán)實(shí)現(xiàn),會(huì)使代碼顯得比較臃腫
2. Springboot提供了比較優(yōu)雅的實(shí)現(xiàn)方式
第一步:pom中引入spring-retry 因?yàn)閞etry是基于aop實(shí)現(xiàn)的 所以這里還需要引入spring aop
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
第二步:?jiǎn)?dòng)類(lèi)上開(kāi)啟spiring-retry模塊
第三步:在需要失敗重試方法上加@Retryable注解
參數(shù)
value:可以設(shè)置對(duì)哪些異常進(jìn)行失敗重試
maxAttempts:設(shè)置失敗重試的次數(shù)
backoff:設(shè)置重試等待策略
delay:失敗重試時(shí)間間隔
multiplier:設(shè)置延遲倍數(shù)
例如:我們delay設(shè)置的是1000 multipler設(shè)置的是2當(dāng)出現(xiàn)異常時(shí),會(huì)間隔1秒,2秒,4秒進(jìn)行重試
第四步:當(dāng)重試次數(shù)耗盡還拋出異常時(shí),我們可以通過(guò)@Recover注解進(jìn)行失敗回調(diào)
拿到我們的異常值和方法的入?yún)⑦M(jìn)行額外的處理,
第五步:我們可以看到,重復(fù)調(diào)用了五次,最后進(jìn)入了我們的失敗調(diào)用方法中
注意:
- @Recover方法的返回值,必須與@Retryable方法的返回值一致
- @Recover方法的第一個(gè)參數(shù)必須是Throwable類(lèi)型的
- 回調(diào)方法與重試方法需要在同一個(gè)實(shí)現(xiàn)類(lèi)里面
- 如果同一個(gè)類(lèi)有多個(gè)回調(diào)方法,我們可以通過(guò)@Retryable注解的recover屬性,指定回調(diào)方法名稱(chēng)
- spring-retry是基于aop實(shí)現(xiàn)的,靜態(tài)方法會(huì)導(dǎo)致aop失效 更多aop的失效場(chǎng)景請(qǐng)看下期
到此這篇關(guān)于SpringBoot接口或方法進(jìn)行失敗重試的實(shí)現(xiàn)方式的文章就介紹到這了,更多相關(guān)SpringBoot接口進(jìn)行失敗重試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中將String類(lèi)型轉(zhuǎn)換為int類(lèi)型的幾種常見(jiàn)方法
在java中經(jīng)常會(huì)遇到需要對(duì)數(shù)據(jù)進(jìn)行類(lèi)型轉(zhuǎn)換的場(chǎng)景,這篇文章主要給大家介紹了關(guān)于Java中將String類(lèi)型轉(zhuǎn)換為int類(lèi)型的幾種常見(jiàn)方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07Java使用Optional實(shí)現(xiàn)優(yōu)雅避免空指針異常
空指針異常(NullPointerException)可以說(shuō)是Java程序員最容易遇到的問(wèn)題了。為了解決這個(gè)問(wèn)題,Java?8?版本中推出了?Optional?類(lèi),本文就來(lái)講講如何使用Optional實(shí)現(xiàn)優(yōu)雅避免空指針異常吧2023-03-03Springmvc模式上傳和下載與enctype對(duì)比
這篇文章主要介紹了Springmvc模式上傳和下載與enctype對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12Java調(diào)用windows系統(tǒng)的CMD命令并啟動(dòng)新程序
本文教你如何使用java程序調(diào)用windows系統(tǒng)的CMD命令啟動(dòng)新程序方法,需要的朋友可以參考下2023-05-05springboot集成websocket的四種方式小結(jié)
本文主要介紹了springboot集成websocket的四種方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12java時(shí)間和字符串之間相互轉(zhuǎn)換幾種方法
這篇文章主要介紹了java時(shí)間和字符串之間相互轉(zhuǎn)換的幾種方法,還詳細(xì)解釋了DateTimeFormatter的三種解析模式,并比較了yyyy和uuuu在嚴(yán)格模式下的區(qū)別,需要的朋友可以參考下2025-03-03