我怀疑这是一个问题,任何人都可以帮忙检查一下吗?
在我的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。
由于
答案 0 :(得分:0)
您正在看到适当的行为。 Eureka和功能区非常有弹性(CAP中的AP)。在您描述的情况下,一个服务至少有一个实例,然后没有实例,功能区eureka客户端保留最后一个知道的服务器列表作为最后的手段。您只是打印名称,如果您尝试连接到该服务,它将失败。这是您使用Hystrix Circuit Breaker的地方,可以在没有实例的情况下提供回退。