4

我有服务 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)

4

3 回答 3

3

如果您将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)。A POSTto/pause将导致 in DOWNeureka 的状态(感谢cloud-starter)。当 eureka 客户端收到状态时,Ribbon 不会将任何请求路由到您的DOWN服务。发布到/shutdown将优雅地停止应用程序。

于 2015-10-20T11:59:02.713 回答
0

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

于 2019-02-26T01:17:48.860 回答
-1

添加稳定版本并在 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>
于 2021-06-29T21:50:17.970 回答