Spring Cloud 应用程序被记录为具有以下端点:
/pause 和 /resume 用于调用 Lifecycle 方法(ApplicationContext 上的 stop() 和 start())
我怀疑这将是在 eureka 中将实例标记为 OUT_OF_SERVICE 的方式,因为 EurekaDiscoveryClientConfiguration 中的代码是一个实现SmartLifecycle的弹簧类:
@Override
public void stop() {
log.info("Unregistering application " + this.instanceConfig.getAppname()
+ " with eureka with status OUT_OF_SERVICE");
if (ApplicationInfoManager.getInstance().getInfo() != null) {
ApplicationInfoManager.getInstance().setInstanceStatus(
InstanceStatus.OUT_OF_SERVICE);
}
this.running.set(false);
}
但是,当我 POST 到 /pause 端点时,我得到一个 200 响应代码(值为 'true'),但上述代码从未执行。
也许我不明白一些事情。如果是这样,我如何触发上述代码使实例停止服务?
(当我关闭实例时会调用EurekaDiscoveryClientConfiguration类的close()方法- 这会导致实例未注册 - 但我希望暂时暂停对该实例的服务)