【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;}
}

未完待续

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...