SpringCloud(4) Eureka 如何主动下线服务节点

目录

      • 1.直接停掉客户端服务
      • 2.发送HTTP请求
        • 1)调用DELETE接口
        • 2)调用状态变更接口
      • 3.客户端主动通知注册中心下线
        • 1)代码示例
        • 2)补充
        • 3)测试

一共有三种从 Eureka 注册中心剔除服务的方式:

1.直接停掉客户端服务

执行如下命令,pid 表示客户端服务进程ID。

kill -9 pid

默认情况下,如果 Eureka Server90s 内没有收到 Eureka 客户端的续约,它会将实例从其注册表中删除。

这种做法的缺点在于,如果客户端已经停止了运行,但仍然在注册中心的列表中,那么当请求到已经停止运行的客户端时,就会发生错误。

2.发送HTTP请求

1)调用DELETE接口

为了让注册中心马上知道服务要下线,可以向 Eureka 注册中心发送 DELETE 请求,格式为:

  • 配置了用户名密码:
curl -s -X DELETE http://{username}:{password}@{eureka-ip}:{port}/eureka/apps/{application}/{instanceId}
  • 没有配置用户名密码:
curl -s -X DELETE http://{eureka-ip}:{port}/eureka/apps/{application}/{instanceId}

注意:

1.{instanceId} 是和客户端服务的 eureka.instance.instance-id 配置对应的,格式可能有所不同,取 UP (1) - 后面的内容就好。

2.{application} 大小写都可以。

举个例子:

我有一个 Eureka 注册中心和一个客户端服务(springboot-eureka-client):

  • Eureka注册中心:http://localhost:1001
  • 客户端服务(springboot-eureka-client):http://192.168.1.209:8081

在这里插入图片描述

如果我需要下线 springboot-eureka-client 服务,那么我可以请求如下地址:

curl -s -X DELETE "http://localhost:1001/eureka/apps/SPRINGBOOT-EUREKA-CLIENT/192.168.1.209:8081"

立即刷新页面,可以看到刚才注册的服务已经消失了。

在这里插入图片描述

由于 Eureka 客户端每隔一段时间(默认 30s)会发送一次心跳到注册中心续约。如果通过这种方式下线了一个服务,而没有及时停掉的话,该服务很快又会回到服务列表中。

2)调用状态变更接口

为了让注册中心马上知道服务要下线,可以向 Eureka 注册中心发送 PUT 请求,传递想要变更的参数。当参数值为 OUT_OF_SERVICE 的时候,服务就不会再使用这个节点了。请求格式为:

  • 配置了用户名密码:
curl -s -X PUT http://{username}:{password}@{eureka-ip}:{port}/eureka/apps/{application}/{instanceId}/status?value=OUT_OF_SERVICE
  • 没有配置用户名密码:
curl -s -X PUT http://{eureka-ip}:{port}/eureka/apps/{application}/{instanceId}/status?value=OUT_OF_SERVICE

相应的,如果想上线也可以用这个接口,将 value 值改为 UP 即可。

  • 配置了用户名密码:
curl -s -X PUT http://{username}:{password}@{eureka-ip}:{port}/eureka/apps/{application}/{instanceId}/status?value=OUT_OF_SERVICE
  • 没有配置用户名密码:
curl -s -X PUT http://{eureka-ip}:{port}/eureka/apps/{application}/{instanceId}/status?value=OUT_OF_SERVICE

补充:根据官方文档,服务的状态有 UPDOWNSTARTINGOUT_OF_SERVICEUNKNOWN 共五种状态,其他状态所代表的具体含义可以自行了解下。

官方文档: https://github.com/Netflix/eureka/wiki/Eureka-REST-operations

举个例子:

我有一个 Eureka 注册中心和一个客户端服务(springboot-eureka-client):

  • Eureka注册中心:http://localhost:1001
  • 客户端服务(springboot-eureka-client):http://192.168.1.209:8081

在这里插入图片描述

如果我需要下线 springboot-eureka-client 服务,那么我可以请求如下地址:

curl -s -X PUT "http://localhost:1001/eureka/apps/SPRINGBOOT-EUREKA-CLIENT/192.168.1.209:8081/status?value=OUT_OF_SERVICE"

请求之后,我们可以看到服务节点被标上了红色的 OUT_OF_SERVICE

在这里插入图片描述

3.客户端主动通知注册中心下线

1)代码示例

如果 Eureka 客户端是一个 Spring Boot 应用,可以通过调用一下代码通知注册中心下线。代码示例如下:

import com.demo.common.Result;
import com.netflix.discovery.DiscoveryManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** <p> @Title RegisterController* <p> @Description 注册客户端Controller** @author ACGkaka* @date 2023/7/12 22:16*/
@RestController
@RequestMapping("/register")
public class RegisterController {@Autowiredprivate DiscoveryClient discoveryClient;/** 获取服务实例信息 */@GetMapping("/getInstance")public Result<Object> getInstance() {List<ServiceInstance> instances = discoveryClient.getInstances("springboot-eureka-client");return Result.succeed().setData(instances);}/** 获取服务列表 */@GetMapping("/getServices")public Result<Object> getServices() {List<String> services = discoveryClient.getServices();return Result.succeed().setData(services);}/** 服务下线 */@GetMapping("/offline")public Result<Object> offline() {DiscoveryManager.getInstance().shutdownComponent();return Result.succeed();}
}

2)补充

补充:如果提示 Could not autowire. No beans of 'DiscoveryClient' type found.,如下图所示:

在这里插入图片描述

如果确保 Eureka Client 依赖已经正常导入,那么有可能是导入了错误的包:

在这里插入图片描述

3)测试

测试一: 获取服务实例信息,请求地址:http://localhost:8081/register/getInstance

在这里插入图片描述

测试二: 获取服务列表,请求地址:http://localhost:8081/register/getServices

在这里插入图片描述

测试三: 服务下线,请求地址:http://localhost:8081/register/offline

在这里插入图片描述

刷新 Eureka 页面,可以看到服务已经下线了。

在这里插入图片描述

整理完毕,完结撒花~ 🌻





参考地址:

1.细说Springcloudeureka的几种主动下线服务的方式,https://www.php1.cn/detail/XiShuo_Springclo_5a001b83.html

2.springCloud 之 Eureka 注册中心平滑下线客户端服务使用及原理,https://css.dandelioncloud.cn/article/details/1588695110810587137

3.eureka服务如何下线及启动,https://www.cnblogs.com/chenlifan/p/16191291.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22317.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

慢速减压控制技术在预防同步辐射光源和原位透射电镜氮化硅窗口膜真空中破裂的应用

摘要&#xff1a;氮化硅薄膜窗口广泛应用于同步辐射光源中的扫描透射软X射线显微镜和原位透射电镜&#xff0c;但氮化硅薄膜只有几百纳米的厚度&#xff0c;很容易因真空抽取初期的快速压差变化造成破裂。为此&#xff0c;本文提出了线性缓变压力控制解决方案&#xff0c;即控制…

物业小程序制作:提升管理效率与服务质量

随着物业管理的日益复杂&#xff0c;物业小程序成为了提高管理效率和提供优质服务的重要工具。物业小程序旨在提供高效的物业管理服务。通过物业小程序&#xff0c;物业公司能够方便地与业主进行信息交流、报修处理等操作。 物业小程序的好处 提高管理效率&#xff1a;物业小程…

七大排序算法——堆排序,通俗易懂的思路讲解与图解(完整Java代码)

文章目录 一、排序的概念排序的概念排序的稳定性七大排序算法 二、堆排序核心思想代码实现 三、性能分析四、七大排序算法 一、排序的概念 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递…

【微信小程序-uniapp】CustomPickerMul 自定义多选选择器组件

1. 效果图 2. 组件完整代码 <template><view class="custom-picker-mul"><view :class&#

2023世界人工智能大会,和鲸科技入选中国信通院《2023大模型和AIGC产业图谱》

近日&#xff0c;2023 世界人工智能大会&#xff08;WAIC&#xff09;“聚焦大模型时代 AIGC 新浪潮”论坛上&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;正式发布《2023 大模型和AIGC产业图谱》&#xff08;以下称“图谱”&#xff09;。和…

Win10 配置ADB安装2023.7.12版本

目录 1. ADB工具介绍2. ADB安装流程 参考 Win10 配置安装ADB教程总结20200514&#xff0c; fastboot刷机 1. ADB工具介绍 ADB ( Android Debug Bridge)&#xff0c;即Android 调试桥。是 Google 为开发人员提供的一种命令行工具&#xff0c;用于与安卓设备进行通信&#xff0…

简单线性回归评估指标+R Squared

使得每一个数据集尽可能的小 均方误差MSE&#xff1a;&#xff08;平方和取平均值&#xff09; 均方根误差RMSE&#xff1a;&#xff08;平方和取平均值开根号&#xff09;&#xff1a;平均误差值 平均绝对误差MAE&#xff1a;&#xff08;绝对值取平均&#xff09;&#xff1a…

mysql中desc的两种用法---1、查询表结构和降序

Mysql中DESC的两种用法 1、查询表结构 语法&#xff1a; desc table_name&#xff1b; PS&#xff1a;此处desc是describe的缩写&#xff0c;用法&#xff1a; desc 表名/查询语句 2、降序 语法&#xff1a; select * from 表 order by 字段 desc select ename,sal from e…

Spring Cloud 远程接口调用OpenFeign负载均衡实现原理详解

环境&#xff1a;Spring Cloud 2021.0.7 Spring Boot 2.7.12 配置依赖 maven依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency&…

Docker安装ElasticSearch/ES

目录 前言准备拉取ElasticSearch镜像安装ElasticSearch拉取elasticsearch-head镜像安装elasticsearch-head参考 前言 TencentOS Server 3.1Docker version 19.03.14, build 5eb3275d40 准备 docker 已安装。 安装 docker 参考&#xff1a;【Centos 8】【Centos 7】安装 docke…

初识Spring - 什么是IoC容器?

目录 一、Spring是什么&#xff1f; Spring就是包含了很多工具方法的 IoC 容器。 1. 什么是IoC&#xff0c;什么是容器 2. IoC的优点 (解决耦合问题) 二、什么是Spring IoC 1. Spring IoC详解 &#xff08;1&#xff09;也就是学习 Spring 最核心的功能&#xff1a; &…

剑指 Offer 05. 替换空格

剑指 Offer 05. 替换空格 文章目录 剑指 Offer 05. 替换空格一.题目描述二.代码(快慢指针-中间指针和末尾指针) 一.题目描述 二.代码(快慢指针-中间指针和末尾指针) class Solution {public:string replaceSpace(string s) {char ch ;int count std::count(s.begin(), s.end…