2015-06-14 56 views
0

我懷疑這是一個問題,任何人都可以幫忙檢查一下嗎?一旦關閉,Spring雲端服務器無法註銷nodeJS服務

在我的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,我在春天應用:

網址nodeService是:http://SJCC02MT0NUFD58.local:3000/

這是PERF等,但在我關閉我的nodeJS服務器後, http://localhost:3000/app/health.json url完全失效,但在主要的java spring應用程序中,我仍然看到相同的輸出。

因此,即使NodeJS服務不再可用,尤里卡仍然記得在內存中。

我的配置有什麼問題嗎?

另一個問題是爲什麼春季發現的網址是http://SJCC02MT0NUFD58.local:3000/而不是http://localhost:3000?我已經將Eureka.server.instance.host配置爲localhost。

感謝

回答

0

您所看到的適當行爲。尤里卡和絲帶的構建非常有彈性(CAP中的AP)。在你描述的情況下,一個服務至少有一個實例,然後是沒有的,功能區eureka客戶端保留最後一個知道的服務器列表作爲最後的手段。你只是在打印名字,如果你嘗試連接到那個服務,它會失敗。這是您使用Hystrix Circuit Breaker的地方,可以在沒有實例啓動的情況下提供回退。

+0

謝謝@spencergibb,在你看來,這也是真的,nodeServer的URL,http://SJCC02MT0NUFD58.local:3000 /,即使我已經把localhost放在sideCar配置中也是需要的嗎?這隻適用於mac嗎? – user3006967

+0

默認情況下,Spring雲使用主機名。 – spencergibb