欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

org.springframework.util.backoff包类图分析Spring4.1.7版本

程序员文章站 2022-07-13 14:35:27
...
此包下类少就几个,下面贴出来

org.springframework.util.backoff包类图分析Spring4.1.7版本
            
    
    博客分类: Java springjava 

此包应该是用来操作什么时候恢复,或任务什么时候调用,调用次数多少,总共调用多少次等应用场景,通过Eclipse的call Hierarchy发现在Spring-jms中 void org.springframework.jms.listener.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful()和boolean org.springframework.jms.listener.DefaultMessageListenerContainer.applyBackOffTime(BackOffExecution execution)以及void org.springframework.jms.listener.DefaultMessageListenerContainer.AsyncMessageListenerInvoker.sleepBeforeRecoveryAttempt()有使用到。

下面一个一个分析
  • BackOff是一个接口,定义了一个方法start(),调用此方法开始一个新的BackOffExecution,指示操作恢复、重试的频率。
  • BackOffExecution是一个接口,定义了一个常量STOP=-1,方法nextBackOff()。返回的是毫秒,表示恢复操作还需等待的时间。如果返回-1,表示不应该恢复操作。
  • FixedBackOff一个类,实现BackOff接口,固定频率,默认5s恢复操作。start()是通过定义FixedBackOffExecution 私有类来实现的。
  • FixedBackOffExecution是FixedBackOff的私有类,默认5s恢复操作,最多重试次数long的最大值Long.MAX_VALUE。
  • ExponentialBackOff是一个类,实现BackOff接口,指数型频率,初始为2s,倍数1.5,最大间隔时间为3s,最大停止时间累加为Long.MAX_VALUE。


代码类似这样使用
BackOff backOff = new FixedBackOff(5000L,5L);
		BackOffExecution exec = backOff.start();
		while(true){
			long wait = exec.nextBackOff();
			if(wait == BackOffExecution.STOP){
				break;
			}else{
				System.out.print(System.currentTimeMillis());
				System.out.println(exec.toString());
				Thread.sleep(wait);
			}
		}
		
		ExponentialBackOff backOff2 = new ExponentialBackOff();
		backOff2.setMaxElapsedTime(1000*60);
		BackOffExecution exec2 = backOff2.start();
		while(true){
			long wait = exec2.nextBackOff();
			if(wait == BackOffExecution.STOP){
				break;
			}else{
				System.out.print(System.currentTimeMillis());
				System.out.println(exec2.toString());
				Thread.sleep(wait);
			}
		}




类图如下

org.springframework.util.backoff包类图分析Spring4.1.7版本
            
    
    博客分类: Java springjava 
  • org.springframework.util.backoff包类图分析Spring4.1.7版本
            
    
    博客分类: Java springjava 
  • 大小: 12.2 KB
  • org.springframework.util.backoff包类图分析Spring4.1.7版本
            
    
    博客分类: Java springjava 
  • 大小: 63 KB
相关标签: spring java