zoukankan      html  css  js  c++  java
  • spring boot / cloud (七) 使用@Retryable来进行重处理 obejct

    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,等组件,都会涉及到重处理,会在后续的章节中讲解


    想获得最快更新,请关注公众号

    想获得最快更新,请关注公众号

  • 相关阅读:
    Silverlight实例教程
    c#.net大文件上传(切片)
    ASP.NET大文件上传(切片)
    jsp大文件上传(切片)
    php大文件上传(切片)
    本地图文直接复制到博客编辑器中
    本地图文直接复制到CMS编辑器中
    本地图文直接复制到SiteFactory编辑器中
    本地图文直接复制到动易CMS编辑器中
    本地图文直接复制到帝国CMS编辑器中
  • 原文地址:https://www.cnblogs.com/itkk/p/7448643.html
Copyright © 2011-2022 走看看