在 Spring 引导之外关闭服务

Shutdown a Service outside of Spring Boot

我正在编写一些简单的微服务来理解 Netflix Eureka 的工作方式。
我想知道是否有可能以编程方式关闭 Java 中的服务,并因此立即从 Eureka 服务注册表注销。
我找到了 Spring 引导执行器端点的解决方案(向 service-URL/actuator/shutdown 发出 POST 请求)。
如果我想关闭不基于 Spring 引导的服务,如何才能达到相同的结果?

以一种非常非常抽象的方式,每个 运行 无限期的进程,例如监听请求的服务器,基本上都是一个 while 循环,例如

while flag:
  listen and process request 

shutdown 只是一个 api 影响 flag 并使程序从循环中存在并恢复直接流程,这将导致该程序结束

因此要关闭不是 spring 引导的服务,您需要创建一个 api 可以像上面那样操纵代码流

此外,spring boot 是一个非常强大且最小的包装器,因此您可以将 spring 引导合并到 java

中的几乎任何服务和程序

请注意 Eureka 支持手动覆盖服务状态,因此您可以告诉 Eureka 忽略并注销一项或多项服务,而不管它们的实际状态如何

对于大多数以被动模式工作的发现服务(不主动发起与服务的联系),例如 eureka 每个服务每 x 次发送一次健康检查,发现服务器将知道该服务处于离线状态只有在 x 时间过去并且健康检查到期后(还有一些其他参数,如阈值和特殊操作模式也被考虑在内)

我建议您参考此 以获取有关控制 "spring-boot-eureka" 的逐出率的更多信息(尤其是最后一条评论)