如何解决应用服务重启后上线状态为false但健康状态正常的问题

本文介绍如何解决应用服务重启后上线状态为false但健康状态正常的问题。

问题现象

应用服务在重启或发布后,在Nacos上查询该服务的上线状态为未上线的红点,但健康状态为正常的绿点。

可能原因

  • 应用服务在注册该服务时,将enabled字段设置为false

  • 在应用停止时,调用过Nacos OpenAPI v1版本中的修改实例或OpenAPI v2版本中的更新实例,且enabled设置字段设置为false。或在1分钟内又重新注册回Nacos,下线的元数据没有因为过期被删除而被重新复用。在OpenAPI v1版本中的修改实例或OpenAPI v2版本中的更新实例有详细说明。

解决方案

  1. 在应用订阅者节点上查找Nacos-Client的日志。具体操作,请参见如何获取Nacos-Client的日志?

  2. 过滤关键字REGISTER-SERVICE并找到注册服务提供者的日志信息,查看提供者详细信息中的enabled字段,不同字段值的处理方法如下所示。

    • 注册时enabled字段值为false

      • 如果日志中显示注册时enabled字段值为false,请修改应用启动时,注册服务提供者的enabled字段值为true,或者删去对enabled字段的设置(其缺省值已为true)。

      • 如果无法找到设置为false的位置,可以在服务提供者确认自身启动完毕后,调用Nacos OpenAPI v1版本中的修改实例或OpenAPI v2版本中的更新实例,将enabled字段设置为true

    • 注册时enabled字段值为true

      如果日志中显示注册时enabled字段值为true,那么指在前一个应用停止时,调用了OpenAPI v1版本中的修改实例或OpenAPI v2版本中的更新实例。不仅设置enabled字段为false,而且新注册的服务提供者IP、端口未变化且间隔小于1分钟。解决方案如下所示。

      • 移除程序停止时自动调用OpenAPI修改的enabled字段,接入微服务治理的配置无损滚动发布功能。

      • 确保停止服务提供者(注销、自动移除)和重新注册服务提供者的间隔大于1分钟

      • 在服务提供者确认自身启动完毕后,调用Nacos OpenAPI v1版本中的修改实例或OpenAPI v2版本中的更新实例,设置enabled字段为true