【问题标题】:Shutdown a Service outside of Spring Boot在 Spring Boot 之外关闭服务
【发布时间】:2018-06-16 21:39:57
【问题描述】:

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

【问题讨论】:

    标签: spring-boot service microservices netflix-eureka service-discovery


    【解决方案1】:

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

    while flag:
      listen and process request 
    

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

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

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

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

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

    关于控制"spring-boot-eureka"的驱逐率的更多信息我推荐你参考这个post(尤其是最后一条评论)

    【讨论】:

    • 谢谢!非常清楚地解释了它是如何工作的!关于如何达到的任何提示?我不明白的是,为什么简单的 SpringApplication.exit(...) 或 IDE 的终止不足以立即取消注册。
    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 2021-05-18
    • 1970-01-01
    • 2020-05-27
    • 2017-10-19
    • 2017-08-14
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多