【Eureka】【源码+图解】【七】Eureka的下线功能
创始人
2024-03-05 12:14:41
0

【Eureka】【源码+图解】【六】Eureka的续约功能

目录

  • 6. 下线
    • 6.1 shutdown()
    • 6.2 服务端cancel
    • 6.3 同步其他server节点

6. 下线

主动下线方式

服务端:/eureka/apps/{application.name}/{instance-id},以本系列文章的helloworld为例,发送DELETE请求http://localhost:3333/eureka/apps/MY-EUREKA-CLIENT/localhost:my-eureka-client:2222便可将客户端实例下线

客户端

1、创建Controller

@RestController
public class EurekaController {@GetMapping("/cancel")public void cancel() {DiscoveryManager.getInstance().shutdownComponent();}
}

2、浏览器直接拍http://localhost:2222/cancel即可将客户端实例下线

下线的整体流程图

在这里插入图片描述

主要分析绿色的三个步骤

6.1 shutdown()

public class DiscoveryClient implements EurekaClient {@PreDestroy@Overridepublic synchronized void shutdown() {if (isShutdown.compareAndSet(false, true)) {......// 注销监听器if (statusChangeListener != null && applicationInfoManager != null) {applicationInfoManager.unregisterStatusChangeListener(statusChangeListener.getId());}// 取消定时任务,包括注册、续约、更新注册信息等cancelScheduledTasks();// 注销if (applicationInfoManager != null&& clientConfig.shouldRegisterWithEureka()&& clientConfig.shouldUnregisterOnShutdown()) {applicationInfoManager.setInstanceStatus(InstanceStatus.DOWN);unregister(); // 向服务端发送下线请求}if (eurekaTransport != null) {// 关闭eurekaTransporteurekaTransport.shutdown();}......}}
}

6.2 服务端cancel

public abstract class AbstractInstanceRegistry implements InstanceRegistry {@Overridepublic boolean cancel(String appName, String id, boolean isReplication) {// 1、从内存实例注册表registry删除// 2、添加到recentCanceledQueue// 3、从overriddenInstanceStatusMap删除// 4、添加到recentlyChangedQueue// 5、从缓存responseCache中删除return internalCancel(appName, id, isReplication);}
}

6.3 同步其他server节点

public class PeerAwareInstanceRegistryImpl extends AbstractInstanceRegistry implements PeerAwareInstanceRegistry {@Overridepublic boolean cancel(final String appName, final String id,final boolean isReplication) {if (super.cancel(appName, id, isReplication)) {// 除了Action.Cancel与register不同,其他可参考register章节replicateToPeers(Action.Cancel, appName, id, null, null, isReplication);return true;}return false;}
}

未完待续

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...