retryer -- 3




概述上一篇日志中,我们介绍了 Retryer 类,及可以用来方便的创建 Retryer 的强大工具类 RetryerBuilderguava 重试工具库 -- RetryerRetryer 创建工具 -- RetryerBuilder 本篇日志中,我们通过面向切面结合 guava 的这个强大的工具类,来实现只需要添加一行注解即可的自动重试机制 注解我们的注解旨在通过简单的参数配置常用的重试策略:@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface TechlogRetryer { long waitMsec() default 0; Class[] retryThrowable() default {}; long maxDelayMsec() default 0; int maxAttempt() default 0; }  切面我们以上面的注解为切点构造一个切面,实现对方法的自动处理@Aspect @Service public class TechlogRetryerAspect { private static final Logger LO
#技术帖    #技术分享    #spring    #aop   
概述在我们的开发中,api 接口调用异常是经常会遇到的,任何接口都会有不同概率的异常情况,对于可以重入的接口,为了避免偶发性异常造成的服务的不可用,重试机制就非常有必要了通常我们的接口超时都是符合正态分布的,即 99.9% 的请求超时时间都不会大于某个值,将这个值设置为请求的超时时间是比较合理的,因为即使将超时时间设置为该值的两倍或更高,按照正态分布的概率来看,请求成功率并不会有明显提高,而使用该值作为超时时间可以保证在 99.9% 的情况下请求正常返回,对于异常情况我们添加重试机制就可以大概率减少失败但是需要注意的是,我们的调用链通常是非常长的,如果在多个层级上都添加重试,那么最终将会造成雪崩效应,最底层将受到指数扩大的请求次数,这对于底层服务的压力是非常大的,因此重试的设置需要非常谨慎,这在底层服务出现问题时尤为明显,过度的重试将会成倍加剧问题的严重性,因此,在重试机制的同时增加递增的重试间隔时间或者熔断机制也是非常有必要的,有时间的话博主将会在博客中介绍用于业务熔断组件 Hystrix,敬请期待 guava 提供了非常优雅、方便的重试工具类 -- retryer maven 依赖<dependency> <groupId>com.g
#读书笔记    #技术帖    #龙潭书斋    #技术分享   
概述上一篇日志中,我们介绍了 Retryer 类guava 重试工具库 -- Retryer由于 Retryer 类构造方法参数较多,较为复杂,而使用 RetryerBuilder 要更加简洁明了,也是更加常用的方式 RetryerBuilder 的创建 -- newBuilderRetryerBuilder 的构造方法是 private 的,这也意味着我们不能通过 new 的方式直接创建 RetryerBuilder 对象RetryerBuilder 提供了一个 static 方法:public static <V> RetryerBuilder<V> newBuilder()  通过:RetryerBuilder retryer = RetryerBuilder.newBuilder(); 就可以创建一个 RetryerBuilder 了 Retryer 对象的创建通过 RetryerBuilder 提供的 build 方法就可以创建出一个 
#读书笔记    #技术帖    #龙潭书斋    #技术分享   



京ICP备15018585号