亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring-retry實(shí)現(xiàn)循環(huán)重試功能

 更新時(shí)間:2023年07月07日 14:11:35   作者:zsq_fengchen  
這篇文章主要介紹了Spring-retry 優(yōu)雅的實(shí)現(xiàn)循環(huán)重試功能,通過(guò)@Retryable注解,優(yōu)雅的實(shí)現(xiàn)循環(huán)重試功能,需要的朋友可以參考下

引言

在實(shí)際的應(yīng)用場(chǎng)景中,可能經(jīng)常會(huì)遇到,當(dāng)請(qǐng)求一個(gè)接口調(diào)一個(gè)服務(wù)的時(shí)候,出現(xiàn)異常或網(wǎng)絡(luò)出現(xiàn)故障的情況下就會(huì)失敗,而對(duì)于那些重要的服務(wù)當(dāng)失敗后,可能我們就會(huì)進(jìn)行重試,多調(diào)用幾次,如果還是失敗再另外進(jìn)行單獨(dú)處理。接下來(lái),就是要講解的重點(diǎn)內(nèi)容,我們可以通過(guò)@Retryable注解,優(yōu)雅的實(shí)現(xiàn)循環(huán)重試功能。

1:引入依賴

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

2:在啟動(dòng)類上開(kāi)啟retry重試功能

package com.patent.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.retry.annotation.EnableRetry;
@SpringBootApplication
@EnableRetry
public class PatenCloudApplication {
    public static void main(String[] args) {
        SpringApplication.run(PatenCloudApplication.class, args);
    }
}

3:業(yè)務(wù)處理,在要調(diào)用的方法上加上@Retryable注解

 @Autowired
    private VehicleLocationDataService vehicleLocationDataService;
    /**
     * 需要在啟動(dòng)類中添加@EnableRetry注釋以開(kāi)啟重試功能,最后在相應(yīng)的方法上添加@Retryable注解。
     * @Recover注解,重試完成之后執(zhí)行的回調(diào)方法
     * 重試機(jī)制,如果調(diào)用方法過(guò)程中觸發(fā)了RuntimeException異常,則20秒后重試一次,最多重試3次,三次重試后會(huì)觸發(fā)recover方法
     * @param orderNo
     * @param chassisNo
     * @param carStatus
     */
    @GetMapping("/retryMyTest")
    @Retryable(value = RuntimeException.class,maxAttempts = 3, backoff = @Backoff(value = 10000L), recover = "recover", listeners = {"myRetryListener"})
    public void retry(String orderNo, String chassisNo, String carStatus) throws RuntimeException {
        vehicleLocationDataService.retryMyTest(orderNo,chassisNo,carStatus);
    }

4:retryMyTest方法的邏輯處理

package com.patent.cloud.retry;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class VehicleLocationDataService {
    public  static  Integer retryCount = 1;
    public void retryMyTest(String orderNo, String chassisNo, String carStatus){
        boolean flag = false;
        if("P8012985".equals(chassisNo)){
            flag = true;
        }
        if(retryCount==4){
            retryCount =1;
        }
        if(!flag){
           log.info("有異常哦,我再試多幾次看下還有沒(méi)異常, 重試第{}次, {},{},{}",retryCount, orderNo,chassisNo,carStatus);
           retryCount ++;
            throw new RuntimeException("調(diào)用失敗!");
        }
    }
}

當(dāng)程序出現(xiàn)RuntimeException的時(shí)候,就好觸發(fā)重試

5:recover方法,上邊定義了maxAttempts 為3,也就是說(shuō),重試三次后,如果還失敗了,則調(diào)用recover方法,需要在方法上標(biāo)注@Recover注解

@Recover
public void recover(RuntimeException runtimeException,String orderNo, String chassisNo, String carStatus) {
  log.info("=======觸發(fā)重試了recover方法======{}==={}=={}===",orderNo,chassisNo,carStatus);
}

6:監(jiān)聽(tīng),同時(shí)還是對(duì)重試方法進(jìn)行了監(jiān)聽(tīng),如我們?cè)诜椒╮etry上,加了listeners 監(jiān)聽(tīng)

package com.patent.cloud.retry;
import lombok.extern.slf4j.Slf4j;
import org.springframework.retry.RetryCallback;
import org.springframework.retry.RetryContext;
import org.springframework.retry.listener.RetryListenerSupport;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class MyRetryListener extends RetryListenerSupport {
    @Override
    public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
        log.info("監(jiān)聽(tīng)到重試過(guò)程關(guān)閉了");
        log.info("=======================================================================");
    }
    @Override
    public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
        log.info("監(jiān)聽(tīng)到重試過(guò)程錯(cuò)誤了");
    }
    @Override
    public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
        log.info("=======================================================================");
        log.info("監(jiān)聽(tīng)到重試過(guò)程開(kāi)啟了");
        return true;
    }
}

7:運(yùn)行結(jié)果

到此這篇關(guān)于Spring-retry 優(yōu)雅的實(shí)現(xiàn)循環(huán)重試功能的文章就介紹到這了,更多相關(guān)Spring-retry循環(huán)重試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中HashSet集合元素去重的操作代碼

    Java中HashSet集合元素去重的操作代碼

    在 Java 編程的廣闊天地里,集合框架是開(kāi)發(fā)者們不可或缺的得力工具,其中,HashSet以其獨(dú)特的去重特性,成為處理不重復(fù)元素場(chǎng)景的首選,今天,咱們就深入探究一下HashSet集合元素的去重操作,需要的朋友可以參考下
    2025-03-03
  • Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之健身俱樂(lè)部管理系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之健身俱樂(lè)部管理系統(tǒng)的實(shí)現(xiàn)

    這是一個(gè)使用了java+SSM+Mysql+Jsp開(kāi)發(fā)的健身俱樂(lè)部管理系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有俱樂(lè)部管理該有的所有功能,感興趣的朋友快來(lái)看看吧
    2022-02-02
  • 詳解Spring Cloud負(fù)載均衡重要組件Ribbon中重要類的用法

    詳解Spring Cloud負(fù)載均衡重要組件Ribbon中重要類的用法

    本篇文章主要介紹了詳解Spring Cloud負(fù)載均衡重要組件Ribbon中重要類的用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java中的參數(shù)傳遞詳細(xì)介紹

    Java中的參數(shù)傳遞詳細(xì)介紹

    大家好,本篇文章主要講的是Java中的參數(shù)傳遞詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 全面理解Java類和對(duì)象

    全面理解Java類和對(duì)象

    下面小編就為大家?guī)?lái)一篇全面理解Java類和對(duì)象。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • Springboot集成SSE實(shí)現(xiàn)單工通信消息推送流程詳解

    Springboot集成SSE實(shí)現(xiàn)單工通信消息推送流程詳解

    SSE簡(jiǎn)單的來(lái)說(shuō)就是服務(wù)器主動(dòng)向前端推送數(shù)據(jù)的一種技術(shù),它是單向的,也就是說(shuō)前端是不能向服務(wù)器發(fā)送數(shù)據(jù)的。SSE適用于消息推送,監(jiān)控等只需要服務(wù)器推送數(shù)據(jù)的場(chǎng)景中,下面是使用Spring Boot來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的模擬向前端推動(dòng)進(jìn)度數(shù)據(jù),前端頁(yè)面接受后展示進(jìn)度條
    2022-11-11
  • Java異常處理方法匯總

    Java異常處理方法匯總

    這篇文章主要介紹了Java異常處理方法匯總,我們?cè)谲浖_(kāi)發(fā)的過(guò)程中,任何語(yǔ)言的開(kāi)發(fā)過(guò)程中都離不開(kāi)異常處理。下面下小編加來(lái)給大家分享各種異常處理,希望對(duì)大家有所幫助,需要的朋友可以參考一下
    2021-12-12
  • IDEA錯(cuò)誤:找不到或無(wú)法加載主類的完美解決方法

    IDEA錯(cuò)誤:找不到或無(wú)法加載主類的完美解決方法

    使用IDEA開(kāi)始就一直在搭建java環(huán)境,許久沒(méi)有使用過(guò)java,剛開(kāi)始有些生疏,先建了一個(gè)最簡(jiǎn)單的類可是運(yùn)行的時(shí)候出現(xiàn)錯(cuò)誤:找不到或無(wú)法加載主類,下面這篇文章主要給大家介紹了關(guān)于IDEA錯(cuò)誤:找不到或無(wú)法加載主類的完美解決方法,需要的朋友可以參考下
    2022-07-07
  • java實(shí)現(xiàn)json字符串格式化處理的工具類

    java實(shí)現(xiàn)json字符串格式化處理的工具類

    這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)json字符串格式化處理的工具類,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • 史上最全最強(qiáng)SpringMVC詳細(xì)示例實(shí)戰(zhàn)教程(圖文)

    史上最全最強(qiáng)SpringMVC詳細(xì)示例實(shí)戰(zhàn)教程(圖文)

    這篇文章主要介紹了史上最全最強(qiáng)SpringMVC詳細(xì)示例實(shí)戰(zhàn)教程(圖文),需要的朋友可以參考下
    2016-12-12

最新評(píng)論