首页 > 解决方案 > 为什么微服务接受请求事件,尽管它在尤里卡服务器注册表中关闭?

问题描述

我有几个微服务注册到 Eureka Server( http://localhost:10100 )

我正在使用以下 REST API 从 eureka 服务器中删除实例

参考:https ://github.com/Netflix/eureka/wiki/Eureka-REST-operations

1)从尤里卡服务器中删除实例(删除)(它删除实例但再次重新注册..)

http://localhost:10100/eureka/apps/MICRO-SERVICE-1/localhost:micro-service-1:10501

2) 更新服务状态为DOWN/OUT_OF_SERVICE

http://localhost:10100/eureka/apps/MICRO-SERVICE-1/localhost:micro-service-1:10501/status?value=DOWN

因此,即使 micro-service-1 状态设置为 DOWN/OUT_OF_SERVICE 我也可以向 micro-service-1 ( http://localhost:10501/MyService/hello )发送请求

相反,它应该不可用,但它接受请求给予响应。

那么,为什么微服务接受请求事件,尽管它的状态在尤里卡服务器注册表中是关闭的?

尤里卡服务器 application.yml 文件

server:
  port: 10100
  address: localhost
eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://localhost:10100/eureka/
  instance:
    prefer-ip-address: true
  server:
    enable-self-preservation: true
    wait-time-in-ms-when-sync-empty: 0

Eureka Client (micro-service-1) application.yml 文件

server:
  port: 10501
  address: localhost
eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:10100/eureka/
  instance:
    hostname: localhost
    prefer-ip-address: true

标签: spring-bootmicroservicesspring-cloudnetflix-eureka

解决方案


您的服务没有内置的方式来解释您已在 Eureka 中将其删除,因此通过直接点击其端口来调用您的服务将始终有效。

要利用目录对服务器状态和多个服务器实例的了解,您需要从 API(例如功能区)调用您的服务,该 API可以从目录构建软件负载平衡器。或者通过Zuul API 代理进行调用,该代理本质上只是一个在内部围绕功能区构建的微服务。

在所有这些情况下,请记住云微服务最终是一致的。也就是说,您所做的更改可能不会立即可用,并且需要时间才能传播到正在运行的服务。


推荐阅读