芭比扣了!Nacos中服务删除不了,肿么办?

e19f6271753150d8ed791a4feb255b26.png

作者 | 磊哥

来源 | Java中文社群(ID:javacn666)

转载请联系授权(微信ID:GG_Stone)

前两天遇到了一个问题,Nacos 中的永久服务删除不了,折腾了一番,最后还是顺利解决了。以下是原因分析和解决方案,建议先收藏,以备不时之需。

临时实例和持久化实例是 Nacos 1.0.0 中新增了一个特性。临时实例和持久化实例最大的区别是健康检查的方式:临时实例使用客户端主动上报的健康检查模式,而持久化实例使用服务端反向探测的模式。也就是说,如果是临时实例,那么客户端需要主动上报自己的健康状况,而持久化实例需要 Nacos 服务器端反向探测实例的健康状况。

而在这两种实例中,临时实例是可以自动删除非健康实例的,并且当所有的临时实例被删除之后,Nacos 中的服务也会被自动删除,这是临时服务的删除流程。但对于持久化实例来说,就没有那么简单了,因此持久化实例即使是非健康状态,也不会自动删除实例和服务,这个时候就需要我们手动删除服务了。

PS:持久化实例也有另一种叫法,叫做永久实例。

421e86b3774ab06397391bcb9170029c.png需要注意的是,在 Nacos 2.0 之前,一个服务中的实例既可以是临时实例也可以是持久化实例,但在 Nacos 2.0 时有了⼀些细微的调整。在 Nacos 2.0 之前,一个服务中的实例既可以是临时实例也可以是永久实例会给运维人员带来极大的困惑和运维复杂度。

与此同时,从系统架构来看,⼀个服务同时存在持久化及非持久化实例的场景也是存在⼀定矛盾的。这就导致该能力事实上并未被广泛使用。为了简化 Nacos 的服务数据模型,降低运维人员的复杂度,提升 Nacos 的易用性,在 Nacos 2.0 中将是否持久化的数据抽象至服务级别,且不再允许⼀个服务同时存在持久化实例和非持久化实例,也就是从 Nacos 2.0 之后,临时实例就变成了临时服务,持久化实例就变成了持久化服务,一个服务的整个生命周期只能有一种实例类型。

为什么需要两种服务类型?

以淘宝为例,双十一大促期间,流量会比平常高出很多,此时服务肯定需要增加更多实例来应对高并发,而这些实例在双十一之后就无需继续使用了,采用临时实例比较合适。而对于服务的一些常备实例,则使用永久实例更合适。

问题重现

但持久化服务在手动删除时候会报错,如下图所示:e5869c0109db5f58b0234f7ff4b40b8d.gif当我们在 Nacos 控制台点击服务的“删除”按钮时,提示“caused: Service DEFAULT_GROUP@@XXX is not empty, can't be delete. Please unregister instance first;”,意思是不能删除,请先注销服务下的实例,于是我们进入服务实例列表,如下图所示:e93a222e510248f9705c257ec8d5bbdd.png服务实例里面没有注销按钮,只有“下线”按钮,难道在服务的“编辑”页面里面?于是我们又点击编辑按钮,看到如下信息:63683cdcdaa128cf5546b6a206b37849.png服务编辑页面还是没有注销按钮,难道要把实例全部“下线”?于是我们尝试将所有的实例“下线”如下图所示:ac88b69f8e43602d2b0ae5e698f07379.png然后再返回服务列表页面,点击“删除”按钮,发现还是原来的提示信息:839ccf84239e61d3cea055c6384025e8.png这可咋整嘞,一顿操作还是删除不了?

解决方案

我们知道除了控制台之外,还可以通过 Nacos SDK 或 OpenAPI 来操作 Nacos,而 OpenAPI 的操作成本是最低的,于是赶紧找出 Nacos 官方的 OpenAPI 文档,看一下如何通过 API 注销服务实例。果然,功夫不负有心人,在官方文档中顺利的找到了注销的 API,如下图所示:

b09667600d7a66029eed5ed35d2be304.pngOpenAPI 地址:https://nacos.io/zh-cn/docs/open-api.html

PS:在这里感谢好友@二师兄,提供的思路。

OpenAPI 内容如下:e5c5f949a1983daaf4c2e36f5a3dc32c.png于是照着 API 文档构建了删除命令:

curl -X DELETE 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=spring-cloud-nacos-producer&groupName=DEFAULT_GROUP&namespaceId=public&ip=10.0.24.8&clusterName=DEFAULT&port=8081&ephemeral=false'

以上命令在 Nacos 服务器执行的结果如下图所示:063f536317549a4688350137a3200b09.png服务器返回了结果“OK”,打开 Nacos 服务实例列表看一下实例是否被正常注销:3a19ee35631c5158d9d78700fc0628d1.png果然有效果,持久化实例被顺利的注销了,于是使用同样的方法把实例 2 也注销一下,如下图所示:a73e232252435b3f9371fa3d759848b2.png当我把服务下的所有实例都注销之后,再去 Nacos 控制台发现服务也随之消失了,如下图所示:fc1cbd94c055edc37a24b28ae7246d5e.png细心一点的朋友会发现,之前的服务并不会立马消失了,而是变成空服务了,要手动切换一下“隐藏空服务”才能展示出来,但有它和没它的效果是一样的了,我们可以创建和它名字相同的临时实例了,这就和删除的效果一样了,如果没有被删除是创建不了临时实例的,所以从逻辑上理解,我们可以认为它已经被删除了。

总结

Nacos 中有两种实例:临时实例和持久化实例(永久实例),在 Nacos 2.0 之后,每个服务中只能保存一种类型的实例,也就是实例类型已经升级成了服务类型了。

对于临时服务来说,无需删除,当临时服务中的所有实例都被删除之后,临时服务也会被自动删除;而永久服务需要先通过 OpenAPI 注销所有的实例,当所有实例被注销之后,服务也被删除了。

是非审之于己,毁誉听之于人,得失安之于数。

公众号:Java中文社群

Java面试合集:https://gitee.com/mydb/interview

5224ea6d50d45460ee783ac5acc2c361.gif

往期推荐

Spring Cloud Alibaba Nacos 服务注册与发现功能实现!

2022-02-07

2d492ac8732e242f19354a5553dc6418.png

Nacos服务注册与发现的2种实现方法!

2022-02-09

c47c507d71018f7d5944979a9ef26007.png

Spring Cloud Alibaba Nacos路由策略之保护阈值!

2022-02-14

b310ccdb21218463bc070e19ea0add52.png

求点赞、在看、分享三连c1615ee44d1eb1743241a3eea655df76.png

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

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

相关文章

Spring Cloud OpenFeign夺命连环9问,这谁受得了?

1、前言前面介绍了Spring Cloud 中的灵魂摆渡者Nacos,和它的前辈们相比不仅仅功能强大,而且部署非常简单。今天介绍一款服务调用的组件:OpenFeign,同样是一款超越先辈(Ribbon、Feign)的狠角色。文章目录如下…

玩转Nacos参数配置!多图勿点

作者 | 磊哥来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)Nacos 中的参数有很多,如:命名空间、分组名、服务名、保护阈值、服务路由类型、临时实例等&#xff…

为什么wait/notify必须要和synchronized一起使用?

作者 | 磊哥来源 | Java面试真题解析(ID:aimianshi666)转载请联系授权(微信ID:GG_Stone)在多线程编程中,wait 方法是让当前线程进入休眠状态,直到另一个线程调用了 notify 或 notify…

Magento Add Fee or Discount to Order Totals

2019独角兽企业重金招聘Python工程师标准>>> In this tutorial, we will see how to add new line item to magento order totals. What this means is that, how to add an additional Fee or Discount, or any kind of charge to order total of the magento chec…

再见 Feign!推荐一款微服务间调用神器,跟 SpringCloud 绝配!

在微服务项目中,如果我们想实现服务间调用,一般会选择Feign。之前介绍过一款HTTP客户端工具Retrofit,配合SpringBoot非常好用!其实Retrofit不仅支持普通的HTTP调用,还能支持微服务间的调用,负载均衡和熔断限…

Spring Cloud Alibaba Nacos 的 2 种健康检查机制!

作者 | 磊哥来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)Spring Cloud Alibaba Nacos 作为注册中心不止提供了服务注册和服务发现功能,它还提供了服务可用性监测的机制。…

Python之包管理工具

在Python环境中已经有很多成熟的包,可以通过安装这些包来扩展我们的程序。 例如,很多时候Python开发人员都会去PyPI网站去查找自己想要使用的包,然后进行安装。PyPI ( Python Package Index)是获得第三方 Python 软件包…

为什么wait和notify必须放在synchronized中?

作者 | 磊哥来源 | Java面试真题解析(ID:aimianshi666)转载请联系授权(微信ID:GG_Stone)在多线程编程中,wait 方法是让当前线程进入休眠状态,直到另一个线程调用了 notify 或 notify…

聊聊并发编程的10个坑

前言对于从事后端开发的同学来说,并发编程肯定再熟悉不过了。说实话,在java中并发编程是一大难点,至少我是这么认为的。不光理解起来比较费劲,使用起来更容易踩坑。不信,让继续往下面看。今天重点跟大家一起聊聊并发编…

macbook终端使用记(二)终端快捷键

为什么80%的码农都做不了架构师?>>> Command K清屏 Command T新建标签 Command M最小化窗口 Command W 关闭当前标签页 Command S 保存终端输出 Command D 垂直分隔当前标签页 Command Shift D 水平分隔当前标签页 Command shift {或}向左/向…

颜值爆表!Redis 官方可视化工具来啦,功能真心强大!

最近逛了一下Redis官方网站,发现Redis不仅推出了很多新特性,而且还发布了一款可视化工具RedisInsight。试用了一下感觉非常不错,最关键的是能支持RedisJSON之类的新特性,这是第三方工具无法比拟的。今天带大家体验一下RedisInsigh…

20个响应式网页设计中的“神话”误区

关于响应式网页的重要性我们已经证实了很长时间了,现在是该把焦点放到如何做出好的响应式网页设计的时候了。一起来看看吧! 虽然很多人都在谈论响应式网页,但并不是每个人都知道他们在说什么。很多时候你看到网上的一些信息也在挑战你对响应式…

MySQL 索引失效的 15 种场景!

背景 无论你是技术大佬,还是刚入行的小白,时不时都会踩到Mysql数据库不走索引的坑。常见的现象就是:明明在字段上添加了索引,但却并未生效。前些天就遇到一个稍微特殊的场景,同一条SQL语句,在某些参数下生效…

Java夺命21连问!(附答案)

大家好,我是磊哥。有位朋友工作三年,去面试,给大家整理一下面试题,并附上答案。Mysql索引在什么情况下会失效MySql的存储引擎InnoDB与MyISAM的区别Mysql在项目中的优化场景,慢查询解决等Mysql有什么索引,索…

SpringCloud Nacos + Ribbon 调用服务的 2 种方法!

作者 | 磊哥来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)在 Nacos 中,服务调用主要是通过 RestTemplate Ribbon 实现的,RestTemplate 是 Spring 提供的 Rest…

SpringCloud Ribbon中的7种负载均衡策略!

作者 | 磊哥来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们…

线程池是如何执行的?拒绝策略有哪些?

作者 | 磊哥来源 | Java面试真题解析(ID:aimianshi666)转载请联系授权(微信ID:GG_Stone)聊到线程池就一定会聊到线程池的执行流程,也就是当有一个任务进入线程池之后,线程池是如何执…

浮动元素的均匀分布和两端对齐

当我们使用float来使元素并排显示的时候,可以使用margin来控制元素之间的距离,而在很多版式里(例如产品图片的列表),需要浮动的元素达到两端对齐的效果,如图1所示。 图1 两端对齐的版式 单纯使用float:left…

20 图|Nacos 手摸手教程

Nacos 作为服务注册中心、配置中心,已经非常成熟了,业界的标杆,在讲解 Nacos 的架构原理之前,我先给大家来一篇开胃菜:讲解 Nacos 如何使用。涉及到如下两个话题:用 Nacos 作为注册中心。用 Nacos 作为配置…

为什么Spring需要三级缓存解决循环依赖,而不是二级缓存?

来源:https://www.cnblogs.com/semi-sub/p/13548479.html在使用spring框架的日常开发中,bean之间的循环依赖太频繁了,spring已经帮我们去解决循环依赖问题,对我们开发者来说是无感知的,下面具体分析一下spring是如何解…