首页 > 解决方案 > 在 Spring Boot 之外关闭服务

问题描述

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

标签: spring-bootservicemicroservicesnetflix-eurekaservice-discovery

解决方案


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

while flag:
  listen and process request 

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

所以要关闭一个不是spring boot的服务,你需要创建一个可以像上面那样操作代码流的api

此外,spring boot它是一个非常健壮且最小化的包装器,因此您可以将 Spring Boot 合并到 Java 中的几乎任何服务和程序中

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

大多数发现服务在被动模式下工作(不主动发起与服务的联系),例如eureka每个服务每 x 次发送一次健康检查,发现服务器只有在 x 时间过去并进行健康检查后才会知道服务处于脱机状态到期(还考虑了一些其他参数,例如阈值和特殊操作模式)

我向您推荐这篇文章以获取有关控制驱逐率的更多信息"spring-boot-eureka"(尤其是最后一条评论)


推荐阅读