<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SpringBoot如何整合spring-retry來實現接口請求重試

      一、重試機制

      由于網絡不穩定或網絡抖動經常會造成接口請求失敗的情況,當我們再去嘗試就成功了,這就是重試機制。

       

      其主要目的就是要盡可能地提高請求成功的概率,但一般情況下,我們請求第一次失敗,代碼運行就拋出異常結束了,如果想再次請求可能還需要手工操作,這非常地不方便,可行性也不佳。因此,Spring框架提供了對重試機制支持,并且在Spring Cloud中可以與Hystrix結合使用,可以避免訪問到已經不正常的實例。

      二、重試機制要素

      重試機制要素如下:

      • 限制重試次數
      • 每次重試的時間間隔
      • 最終失敗結果的報警或事物回滾
      • 在特定失敗異常事件情況下選擇重試

       

      三、重試機制注意事項

      對于非冪等性的方法我們要慎用重試機制,可能會造成意料之外的后果。
      所謂冪等性:就是用戶對于同一操作發起的一次請求或者多次請求的結果是一致的,不會因為多次點擊而產生了副作用。

      四、SpringBoot整合spring-retry

      下面我們就來看下,我們應該如何使用SpringBoot來整合spring-retry組件實現重試機制。

      1)添加依賴

      首先我們在SpringBoot項目中的pom.xml添加相關依賴,如下:

      <!-- 重試相關依賴包 -->
      <dependency>
          <groupId>org.springframework.retry</groupId>
          <artifactId>spring-retry</artifactId>
          <version>1.2.4.RELEASE</version>
      </dependency>
       
      <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
          <version>1.9.4</version>
      </dependency>

      2)添加@EnableRetry注解

      在主啟動類Application上添加@EnableRetry注解,實現對重試機制的支持

      @SpringBootApplication
      @EnableRetry
      public class RetryApplication {
       
          public static void main(String[] args) {
       
              SpringApplication.run(RetryApplication.class, args);
          }
       
      }

      注意:@EnableRetry也可以使用在配置類、ServiceImpl類、方法上

      3)添加@Retryable注解

      我們針對需要實現重試的方法上添加@Retryable注解,使該方法可以實現重試,這里我列出ServiceImpl中的一個方法:

      @Service
      public class RetryServiceImpl implements RetryService {
       
          @Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 2000,multiplier = 1.5))
          public String testRetry() throws Exception {
       
              System.out.println("開始執行代碼:"+ LocalTime.now());
              int code = 0;
              // 模擬一直失敗
              if(code == 0){
                 // 這里可以使自定義異常,@Retryable中value需與其一致
                  throw new Exception("代碼執行異常");
              }
              System.out.println("代碼執行成功");
              return "success";
          }
      }

      說明:@Retryable配置元數據情況:
      value :針對指定拋出的異常類型,進行重試,這里指定的是Exception
      maxAttempts :配置最大重試次數,這里配置為3次(包含第一次和最后一次)
      delay: 第一次重試延遲間隔,這里配置的是2s
      multiplier :每次重試時間間隔是前一次幾倍,這里是1.5倍

      4)Controller測試代碼

      @RestController
      @RequestMapping("/test")
      public class TestController {
          @Autowired
          private RetryService retryService;
       
          @GetMapping("/retry")
          public String testRetry() throws Exception {
              return retryService.testRetry();
          }
      }

      5)發送請求

      發送請求后,我們發現后臺打印情況,確實重試了3次,并且在最后一次重試失敗的情況下,才拋出異常,具體如下(可以注意下時間間隔):

       

      SpringBoot整合spring-retry組件實現重試機制

      6)補充:@Recover

      一般情況下,我們重試最大設置的次數后,仍然失敗拋出異常,我們會通過全局異常處理類進行統一處理,但是我們其實也可以自行處理,可以通過@Recover注解來實現,具體如下:

      @Service
      public class RetryServiceImpl implements RetryService {
       
          @Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 2000,multiplier = 1.5))
          public String testRetry() throws Exception {
       
              System.out.println("開始執行代碼:"+ LocalTime.now());
              int code = 0;
              if(code == 0){
                  // 這里可以使自定義異常,@Retryable中value需與其一致
                  throw new Exception("代碼執行異常");
              }
              System.out.println("代碼執行成功");
              return "success";
          }
       
          /**
           * 最終重試失敗處理
           * @param e
           * @return
           */
          @Recover
          public String recover(Exception e){
       
              System.out.println("代碼執行重試后依舊失敗");
              return "fail";
          }
      }

      注意:
      1)@Recover的方法中的參數異常類型需要與重試方法中一致
      2)該方法的返回值類型與重試方法保持一致
      再次測試如下(發現不會再拋出異常):
      SpringBoot整合spring-retry組件實現重試機制

      本文首發于Java潘老師個人博客:SpringBoot整合spring-retry組件實現重試機制

       

      posted @ 2021-08-14 14:01  Java潘老師  閱讀(1142)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲成人av在线资源| 熟妇的味道hd中文字幕| 日韩在线观看中文字幕| 亚洲国产激情一区二区三区| 五月天天天综合精品无码| 日韩精品国产另类专区| 黄瓜视频在线观看| 日韩伦理片一区二区三区| 国产日韩精品中文字幕| 免费无码又爽又刺激高潮虎虎视频| 亚洲区日韩精品中文字幕| 饥渴的熟妇张开腿呻吟视频| 国产一级片内射在线视频| 性欧美老人牲交xxxxx视频| 亚洲狠狠狠一区二区三区| 中文字幕av一区二区| 国内少妇偷人精品免费| 69天堂人成无码免费视频| 精品国产乱弄九九99久久| 成人看的污污超级黄网站免费| 亚洲成在人线AⅤ中文字幕| 亚洲欧美日韩高清一区二区三区| av在线播放无码线| 嘉善县| 四川丰满少妇无套内谢| 亚洲欧美日韩久久一区二区| 五月婷婷深开心五月天| 天天摸天天碰天天添| 国产乱理伦片在线观看| 国产一区二区在线观看粉嫩| 久久精品国产清自在天天线| 国产在线乱子伦一区二区| 免费av深夜在线观看| 暖暖 免费 高清 日本 在线观看5 色老头亚洲成人免费影院 | 国产99在线 | 亚洲| 特黄做受又粗又大又硬老头 | 好湿好紧太硬了我太爽了视频| 开心五月激情综合久久爱| 精品无码国产污污污免费| 国产亚洲欧美另类一区二区| 国产蜜臀久久av一区二区|