关闭nodeJS服务后,Spring cloud sidecar无法取消注册

时间:2015-06-14 16:59:16

标签: spring-cloud service-discovery netflix-eureka

我怀疑这是一个问题,任何人都可以帮忙检查一下吗?

在我的sideCar应用程序中,我有application.yml:

server:
  port: 5678
spring:
  application:
    name: nodeservice

sidecar:
  port: ${nodeServer.instance.port:3000}
  health-uri: http://localhost:${nodeServer.instance.port:3000}/app/health.json

eureka:
  instance:
    hostname: ${host.instance.name:localhost}
    leaseRenewalIntervalInSeconds: 5 #default is 30, recommended to keep default
    metadataMap:
      instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}}
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

在我的主要春季配置应用程序中,我有:

String url_node = "";
        try {
            InstanceInfo instance = discoveryClient.getNextServerFromEureka("nodeservice", false);
            // InstanceInfo instance = discoveryClient.getNextServerFromEureka("foo", false);
            url_node = instance.getHomePageUrl();
        } catch (Exception e) {
        }

现在我启动了nodeJS服务器,我在春季app:

nodeService的网址是:http://SJCC02MT0NUFD58.local:3000/

这很完美,但在我关闭nodeJS服务器后, http://localhost:3000/app/health.json网址已完全关闭,但在主java应用程序中,我仍然看到相同的输出。

所以,即使NodeJS服务不再可用,eureka仍然记得在内存中。

我的配置有什么问题?

另一个问题是为什么春天发现的网址是http://SJCC02MT0NUFD58.local:3000/,而不是http://localhost:3000?我已经将Eureka.server.instance.host配置为localhost。

由于

1 个答案:

答案 0 :(得分:0)

您正在看到适当的行为。 Eureka和功能区非常有弹性(CAP中的AP)。在您描述的情况下,一个服务至少有一个实例,然后没有实例,功能区eureka客户端保留最后一个知道的服务器列表作为最后的手段。您只是打印名称,如果您尝试连接到该服务,它将失败。这是您使用Hystrix Circuit Breaker的地方,可以在没有实例的情况下提供回退。