在服务运行过程中,在nacos控制台配置管理修改为错误的jdbc连接,模拟服务异常。 此时spring boot admin提示服务已处于down的状态。但是nacos服务列表里面状态还是健康的。 且这个服务的接口还可以正常调用。 nacos的服务健康检查只需要客户端一直保持心跳就行吗?跟/actuator/health检查是否不一致。辛苦答疑。谢谢。
spring cloud alibaba 2.2.1.RELEASE;spring cloud Hoxton.SR1;spring boot 2.2.2.RELEASE; nacos server是linux外置mysql 1.3.1集群三个节点 ;
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba.nacos nacos-client com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.nacos nacos-client com.alibaba.nacos nacos-client 1.3.1
原提问者GitHub用户zhujiebing
在服务运行过程中,如果我们在 Nacos 控制台配置管理修改了错误的 JDBC 连接,模拟服务异常,那么服务状态在 Spring Boot Admin 中会显示为 down 状态。但是 Nacos 服务列表中的状态仍然是健康的,这是因为 Nacos 服务端和客户端之间的心跳还在正常进行,所以客户端认为服务端是健康的。
关于服务的健康检查,Nacos 客户端和服务端之间使用心跳机制来检测服务的健康状况。当服务端和客户端之间的心跳正常时,Nacos 服务列表中会显示服务状态为健康。但是,如果服务端和客户端之间的心跳停止或者服务出现故障,Spring Boot Admin 就会检测到服务的异常状态并显示服务状态为 down。
另一方面,/actuator/health 检查是一种用于检查应用程序内部状态的机制,它可以帮助我们了解应用程序的健康状况。因此,/actuator/health 检查和 Nacos 的心跳机制并不完全一致。虽然心跳机制可以检测到服务端和客户端之间的连接是否正常,但它不能检查应用程序内部的状态。而 /actuator/health 检查可以更全面地检查应用程序的健康状况。
总的来说,虽然 Nacos 的心跳机制可以检测到服务端和客户端之间的连接是否正常,但它不能检查应用程序内部的状态。而 /actuator/health 检查可以更全面地检查应用程序的健康状况。在实际应用中,我们可以结合使用这两种机制来更好地检测服务的健康状况。
非持久化实例,目前通过心跳上报来确认健康状态,如果实例心跳上报一直正常,但是接口本身存在异常,nacos目前是检测不出来的。
持久化实例可以通过设置主动探测的方式,但是并不确认语义。比如您这个检测接口,通过返回的内容是up还是down区分,这个相当于定制需求。 之后不排除会优化开放自定义接口来探测,但是目前没有。
原回答者GitHub用户KomachiSion
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。