2016-07-25 25 views
0

根據此博客https://spring.io/blog/2015/07/14/microservices-with-spring這是基於尤里卡服務發現和服務發現工作正常。春季開機應用的領事服務發現問題

但是,當已經切換到使用領事代替尤里卡服務發現不能正常工作,並收到此錯誤:

java.lang.IllegalStateException: No instances available for ACCOUNTS-SERVICE 
at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(RibbonLoadBalancerClient.java:79) 
at org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor.intercept(LoadBalancerInterceptor.java:46) ... 

更新:後已通過提供正確的健康檢查端點固定先前的錯誤(見回答以下),在bootstrap.yml部署與領事服務器的正確提供主機和端口到Cloud Foundry服務時(在「引導」階段加載基於領事PropertySource):

--- 
spring: 
    profiles: cloud 
    cloud: 
    consul: 
     host: <consul host or ip> 
     port: 8500 

領事在註冊服務,bu t臨界狀態(失敗)!

希望得到任何幫助或指導。

感謝

+1

如果服務獲得成功註冊,您是否檢查過Consul UI?只是爲了消除,如果註冊或發現是你的問題。 –

+0

是服務失敗(標記爲關鍵)。 – kmarabet

+1

你可能調整了健康檢查嗎? –

回答

2

的問題涉及到被設置爲/健康端點領事健康檢查默認路徑。 因此,在所有客戶端應用程序(網絡服務器和微服務)中啓用彈簧執行器後,此問題已得到解決。

或者你可以更改bootstrap.yml文件的默認領事健康檢查端點:

cloud: 
    consul: 
     discovery: 
     healthCheckPath: /test 

NB。爲了使彈簧致動器中行家加入到pom.xml文件以下依賴性:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId> 
</dependency> 

更多信息參見:http://cloud.spring.io/spring-cloud-consul/spring-cloud-consul.html

當部署(推動)到CF(CloudFoundry)的的URI部署的應用程序應當提供給領事服務發現過程(CF提供的應用程序的URI的在vcap.application.uris環境變量),因此下面的配置應被添加到bootsrap.yml文件:

--- 
spring: 
    profiles: cloud 
    cloud: 
    consul: 
     host: <consul host or ip> 
     port: 8500 
     discovery: 
     instanceId: ${spring.application.name}:${vcap.application.application_name}:${vcap.application.instance_id} 
     hostname: ${vcap.application.uris[0]} 
     port: 80 

NB. instanceId is used by Consul to register the application (microservice) instance.