说明:
代码设计的挺好的,以后可以参考,在此记录下
翻译说明
使用重试语义简化操作执行的模板类。
Retryable操作封装在RetryCallback接口的实现中,并使用提供的execute方法之一执行。
默认情况下,如果抛出任何异常或异常的子类,则重试操作。可以使用setRetryPolicy(RetryPolicy)方法更改此行为。
另外,在默认情况下,每个操作最多重试三次,其间没有后退。可以使用setRetryPolicy(RetryPolicy)和setBackOffPolicy(BackOffPolicy)属性配置此行为。BackOffPolicy控制每次重试之间的暂停时间。
这个类是线程安全的,适合在执行操作和执行配置更改时并发访问。因此,可以动态更改重试次数以及使用的BackOffPolicy,并且不会影响正在进行的可重试操作。
maven引入
<!-- retry组件,stream里边使用了,这里是一个例子-->
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.3.0</version>
</dependency>
例子表述
public static void main(String[] args) {
// 字面意思,统计信息的监听
DefaultStatisticsRepository defaultStatisticsRepository = new DefaultStatisticsRepository();
StatisticsListener statisticsListener = new StatisticsListener(defaultStatisticsRepository);
RetryTemplate retryTemplate = RetryTemplate.builder()
// 重试10次
.maxAttempts(10)
.withListener(statisticsListener)
// 阻断时间1秒
.fixedBackoff(1000)
.build();
String execute = retryTemplate.execute(context -> {
System.out.println(context.getRetryCount());
return "hello world";
});
System.out.println(execute);
}
结构分析
对于许多代码,大概都包含配置config,作为全局配置,用于组件启动过程的初始化配置信息和组件内部的局部配置信息,上下文context可作为线程上下文或全局上下文,会贯穿整个组件生命周期前后,产生到销毁的过程中,会在生命周期内的各个内部组件的执行过程中所应用,像spring也会实现该上下文接口转化出一个子类上下文,用于扩展组件,便于数据的隔离。具体执行处理器processer,执行器一般会作为一个连接桥的功能,比如由一个采集数据的执行器processer执行完之后,将进入格式化的执行器processer,格式化Parser的执行器processer执行完之后,将进入发送Sink的执行器processer。设计模式好像都有单例模式、工厂模式、责任链、建造者、观察者模式等等,如果包含Manager管理者的话,一般包含静态成员变量或ThreadLocal容器,有的组件还包含了统计的stat类,进行调用次数或执行状态的统计,统计类一般被具体执行类继承或者封装到上下文content里边,如果需要对数据进行进一步增强处理,有的组件会加入拦截器链的形式对数据进行格式化处理。并且多余实现多态的一个通性,大多都是execute进入方法,doExecute将执行方法,其他的例如process、doProcess,create、doCreate,handler、doHandler,service、doService,start、doStart,filter、doFilter等等,当然如果系统更加丰富的化,应该加入元数据信息接口,被执行类所继承,设置执行类的元数据信息,如果像tomcat、spring等代码,则需要生命周期lifecicle的管理,对于support结尾的类一般作为扩展接口出现。
代码模式:类似于jdk8的流式编程更好的可读性。这里是这样的,当然也可以直接进行实例化操作。
RetryTemplate retryTemplate = RetryTemplate.builder() .maxAttempts(10) .fixedBackoff(1000) .build();
1: 处理器Processer
这里边叫做RetryOperations,执行操作叫做execute。实现类即RetryTemplate
2: BackOff重试阻塞类图构建
3:重试机制类图构建:
4:监听类图,监听作为列表数据存在retrytemplate中,执行execute后,RetryCallback前遍历执行,注释表述是起到对context的增强作用