package com.haogrgr.test.util;
import org.springframework.util.backoff.BackOffExecution;
import org.springframework.util.backoff.ExponentialBackOff;
/**
* 在如连接网络的应用中,网络是不稳定的有时候会连接断开,因此为了保证断开重连接;
* 还有如系统之间互联,相互之间发生消息,如果某个服务器因为不确定因此连接不上,
* 也需要断开重连;则需要一定的规则;常见的规则有:
*
* 1、按照固定时间间隔重试,比如100毫秒;这种方式在网络不稳定时重连可能造成某一时间点流量同时发送,
* 阻塞网络;或者造成发送一些无意义的请求;
*
* 2、按照指数时间间隔重试,比如刚开始100毫秒,下一次200毫秒等;比如支付宝和第三方集成时就是类似方式。
*
* 来源:http://jinnianshilongnian.iteye.com/blog/2103752
*
* @author haogrgr
*/
public class SpringBackOffUtil {
public static void main(String[] args) {
ExponentialBackOff backOff = new ExponentialBackOff(100, 1.5);// 初始间隔,递增倍数(上次基础上)
backOff.setMaxInterval(5 * 1000L);// 最大间隔(上一次和下一次最大间隔)
backOff.setMaxElapsedTime(50 * 1000L);// 最大总时间间隔(第一次和最后一次间隔)
BackOffExecution execution = backOff.start();
for (int i = 1; i <= 18; i++) {
System.out.println(execution.nextBackOff());
}
System.out.println(execution.nextBackOff());
}
}