【问题标题】:Spring Eureka: gently shutdown a serviceSpring Eureka:轻轻关闭服务
【发布时间】:2016-01-18 19:38:14
【问题描述】:

我有服务 A,即使用服务 B1 和 B2(同一服务的两个实例),均通过 Eureka 配置。

现在我想轻轻地放下 B1(这样 A 在处理失败的 B1 请求时不会出现问题/延迟)。我想有这样一个程序:

  1. 告诉 B1 停止 ping Eureka
  2. 让 Eureka 宣传 B1 正在下降
  3. 等到 A 得到信息并且不再使用 B1
  4. 然后关闭 B1

我在第 1 步遇到问题。如何请求 B1 停止 ping?查找了一些 JMX 操作但没有找到。

(如果我跳过第 1 步,只是从 Eureka 中删除 B1,它会从注册表中删除,但会很快更新,因为 B1 仍在 ping Eureka)

【问题讨论】:

    标签: spring-cloud netflix-eureka


    【解决方案1】:

    如果您将cloud-starteractuator 依赖添加到您的项目中

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    

    您将拥有许多管理端点(由actuator 提供)。 POST/pause 将导致尤里卡中的 DOWN 状态(感谢 cloud-starter)。当 eureka 客户端收到状态时,Ribbon 不会将任何请求路由到您的 DOWN 服务。发布到/shutdown 将正常停止应用程序。

    【讨论】:

    • 谢谢,我已经检查过了(在非常简单的应用程序上),看起来它正在工作(仍在处理请求)。一个问题,只是为了确定:暂停后的日志中有一个条目:“DefaultLifecycleProcessor:在阶段 0 停止 bean”。这是什么意思?暂停是否会影响应用行为?
    【解决方案2】:

    根据this github question,您最好添加重试,因为DOWN实例会在被删除之前停留一段时间,否则可能会有失败的客户端请求被路由到该实例。

    【讨论】:

      【解决方案3】:

      在 pom.xml 中添加稳定版本并编译“范围” 喜欢

      <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
              <version>2.2.8.RELEASE</version>
              <scope>compile</scope>
          </dependency>
      

      【讨论】:

        猜你喜欢
        • 2010-10-02
        • 1970-01-01
        • 1970-01-01
        • 2021-01-16
        • 1970-01-01
        • 2017-11-18
        • 2012-01-25
        • 1970-01-01
        • 2014-06-07
        相关资源
        最近更新 更多