<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          看頭圖說話

          共 3270字,需瀏覽 7分鐘

           ·

          2020-12-17 12:41

          a713a8d8a8ec92ae3f4e9335afc2b06a.webp


          前言:當我們調用第三方接口或者在同一個注冊中心的其他服務的時候,由于一些原因沒有返回成功的標識,需要嘗試多次獲取響應。


          01
          加入依賴


          <dependency>         <groupId>org.springframework.retrygroupId>         <artifactId>spring-retryartifactId>dependency>


          02
          手寫代碼實現(xiàn)


          public?class?TestJob?{
          ????private?static?Logger?logger?=?LoggerFactory.getLogger(TestJob.class);
          private int cnt = 0;
          public void retry(String params){ RetryTemplate oRetryTemplate = new RetryTemplate();//????????SimpleRetryPolicy?oRetryPolicy?=?new?SimpleRetryPolicy(5);//簡單重試策略,重試5次????????AlwaysRetryPolicy?oRetryPolicy?=?new?AlwaysRetryPolicy();//重試策略,一直重試直到成功????????oRetryTemplate.setRetryPolicy(oRetryPolicy);//指定重試策略,也可以用其他的 try { // obj為doWithRetry的返回結果,可以為任意類型 Object obj = oRetryTemplate.execute(new RetryCallback() { @Override public Object doWithRetry(RetryContext context) throws Exception {// 開始重試 System.out.println(params + "----retry----" + context.getRetryCount()); doTask(params); return "success"; } }, new RecoveryCallback() { @Override public Object recover(RetryContext context) throws Exception { // 重試多次后都失敗了 System.out.println("重試多次失敗"); return "error"; } }); } catch (Exception e) { e.printStackTrace(); }????}
          public void doTask(String data) throws Exception { try{ System.out.println("exec---" + data); if(cnt==10){ System.out.println("exec success"); return; } int code = 400; if(code!=200){ cnt++; throw new Exception("error"); // 拋出異常,執(zhí)行重試 } }catch (Exception e){ System.out.println(e.getMessage()); throw e;????????} }
          public static void main(String[] args) { TestJob t = new TestJob(); System.out.println("start exec"); String data = UUID.randomUUID().toString(); try{ t.doTask(data); }catch (Exception e){ //重試data t.retry(data); } }}


          03
          基于注解實現(xiàn)


          @Service@EnableRetry //開啟重試注解,必須public class CallServiceImpl {    @Autowired    MyService myService;
          @Autowired RedisService redisService;
          private static Logger logger= LoggerFactory.getLogger(CallServiceImpl.class);
          @Override????//重試注解,必須 @Retryable(value = {Exception.class}, maxAttempts = 2, backoff = @Backoff(delay = 2000L)) public Result invoke(MyParamForm param) throws Exception { ResultString,Object>> result = new Result<>(); try{ result=myService.invoke(param); }catch (Exception e){ logger.error("invoke err:{}, param:{}",e.getMessage(),JSON.toJSONString(esgParamForm)); throw e; } if (result.getCode() != ResultCodeEnum.SUCCESS.getCode()){ logger.error("invoke fail:{}, param:{}", JSON.toJSONString(result),JSON.toJSONString(esgParamForm)); throw new Exception("invoke callfail"); } return result;????}}
          value

          拋出指定異常才會重試

          maxAttempts

          最大重試次數(shù),默認3次

          backoff

          重試等待策略,默認使用@Backoff,@Backoff的value默認為1000L;multiplier(指定延遲倍數(shù))


          最后,關于重試還有@Recover注解,注解在方法上,重試失敗后會執(zhí)行該方法,@Retryable注解也還有其他一些值沒有說到,朋友需自行探究,歡迎留言相告。


          e8f619806bb04d33b6096c7f55a4c399.webp
          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    亚洲无码免费电影 | 超碰人人操人人操 | 一本到久久 | 被黑人操逼视频 | 色婷婷国产精品秘 免 |