编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

聊聊jest的IdleConnectionReaper(jest beforeeach)

wxchong 2024-09-02 03:57:15 开源技术 14 ℃ 0 评论

本文主要研究一下jest的IdleConnectionReaper

IdleConnectionReaper

jest-common-6.3.1-sources.jar!/io/searchbox/client/config/idle/IdleConnectionReaper.java

public class IdleConnectionReaper extends AbstractScheduledService {
?
 final static Logger logger = LoggerFactory.getLogger(IdleConnectionReaper.class);
?
 private final ReapableConnectionManager reapableConnectionManager;
 private final ClientConfig clientConfig;
?
 public IdleConnectionReaper(ClientConfig clientConfig, ReapableConnectionManager reapableConnectionManager) {
 this.reapableConnectionManager = reapableConnectionManager;
 this.clientConfig = clientConfig;
 }
?
 @Override
 protected void runOneIteration() throws Exception {
 logger.debug("closing idle connections...");
 reapableConnectionManager.closeIdleConnections(clientConfig.getMaxConnectionIdleTime(),
 clientConfig.getMaxConnectionIdleTimeDurationTimeUnit());
 }
?
 @Override
 protected Scheduler scheduler() {
 return Scheduler.newFixedDelaySchedule(0l,
 clientConfig.getMaxConnectionIdleTime(),
 clientConfig.getMaxConnectionIdleTimeDurationTimeUnit());
 }
?
 @Override
 protected ScheduledExecutorService executor() {
 final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(
 new ThreadFactoryBuilder()
 .setDaemon(true)
 .setNameFormat(serviceName())
 .build());
 // Add a listener to shutdown the executor after the service is stopped. This ensures that the
 // JVM shutdown will not be prevented from exiting after this service has stopped or failed.
 // Technically this listener is added after start() was called so it is a little gross, but it
 // is called within doStart() so we know that the service cannot terminate or fail concurrently
 // with adding this listener so it is impossible to miss an event that we are interested in.
 addListener(new Listener() {
 @Override public void terminated(State from) {
 executor.shutdown();
 }
 @Override public void failed(State from, Throwable failure) {
 executor.shutdown();
 }}, MoreExecutors.directExecutor());
 return executor;
 }
}
  • IdleConnectionReaper继承了AbstractScheduledService,它的构造器接收clientConfig及reapableConnectionManager;其runOneIteration执行了reapableConnectionManager.closeIdleConnections;其scheduler方法创建的是fixedDelay Scheduler;其executor方法创建的是SingleThreadScheduledExecutor

ReapableConnectionManager

jest-common-6.3.1-sources.jar!/io/searchbox/client/config/idle/ReapableConnectionManager.java

public interface ReapableConnectionManager {
 void closeIdleConnections(long idleTimeout, TimeUnit unit);
}
  • ReapableConnectionManager接口定义了closeIdleConnections方法

HttpReapableConnectionManager

jest-6.3.1-sources.jar!/io/searchbox/client/config/idle/HttpReapableConnectionManager.java

public class HttpReapableConnectionManager implements ReapableConnectionManager {
 private final HttpClientConnectionManager connectionManager;
 private final NHttpClientConnectionManager nConnectionManager;
?
 public HttpReapableConnectionManager(HttpClientConnectionManager connectionManager, NHttpClientConnectionManager nConnectionManager) {
 if(connectionManager == null || nConnectionManager == null) throw new IllegalArgumentException();
?
 this.connectionManager = connectionManager;
 this.nConnectionManager = nConnectionManager;
 }
?
 @Override
 public void closeIdleConnections(long idleTimeout, TimeUnit unit) {
 connectionManager.closeIdleConnections(idleTimeout, unit);
 nConnectionManager.closeIdleConnections(idleTimeout, unit);
 }
}
  • HttpReapableConnectionManager实现了ReapableConnectionManager接口;其构造器要求输入connectionManager及nConnectionManager,二者不能同时为null;其closeIdleConnections方法分别执行了connectionManager.closeIdleConnections及nConnectionManager.closeIdleConnections

小结

  • IdleConnectionReaper继承了AbstractScheduledService,它的构造器接收clientConfig及reapableConnectionManager;其runOneIteration执行了reapableConnectionManager.closeIdleConnections;其scheduler方法创建的是fixedDelay Scheduler;其executor方法创建的是SingleThreadScheduledExecutor
  • ReapableConnectionManager接口定义了closeIdleConnections方法
  • HttpReapableConnectionManager实现了ReapableConnectionManager接口;其构造器要求输入connectionManager及nConnectionManager,二者不能同时为null;其closeIdleConnections方法分别执行了connectionManager.closeIdleConnections及nConnectionManager.closeIdleConnections

doc

  • IdleConnectionReaper

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表