初始化配置
在Eureka-Server启动的时候,会启动一个定时任务,用来清理过期的客户端
protected void initEurekaServerContext() throws Exception {
// ....省略N多代码
// 服务刚刚启动的时候,去其他服务节点同步客户端的数量。
int registryCount = this.registry.syncUp();
// 这个方法里面计算expectedNumberOfRenewsPerMin的值 , 重点在这里面,这里启动了清理任务的定时器
this.registry.openForTraffic(this.applicationInfoManager, registryCount);
// Register all monitoring statistics.
EurekaMonitors.registerAllStats();
}
@Override
public void openForTraffic(ApplicationInfoManager applicationInfoManager, int count) {
// ...省略N多代码
// 开启定时清理过期客户端的定时器
super.postInit();
}
protected void postInit() {
renewsLastMin.start();
if (evictionTaskRef.get() != null) {
evictionTaskRef.get().cancel();
}
evictionTaskRef.set(new EvictionTask());
// 设置定时器
evictionTimer.schedule(evictionTaskRef.get(),
serverConfig.getEvictionIntervalTimerInMs(),
serverConfig.getEvictionIntervalTimerInMs());
}
renewsLastMin.start() : 在每个Eureka-Server端都维护着,每分钟的续约数量,续约数量是有一个Long类型的变量
来存储的,每过一分钟就需要对这个变量进行清0 , 因此这个地方是为了启动这个线程
public synchronized void start() {
if (!isActive) {
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
// 进行清0
lastBucket.set(currentBucket.getAndSet(0));
} catch (Throwable e) {
<